问题描述
前台上传文件,后台用fast-csv模块读取文件并插入,希望插入完成以后要返回给前台,所以采用了promise,但是好像吧并没有起作用,几千行会有数据没有插入数据库,大文件会中途停止执行,希望能多多指点,谢谢
问题出现的环境背景及自己尝试过哪些方法
nodejs的异步执行机制,采用过await/async,promise,都不是很管用。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
//
query2 = (sql, params = []) => {
return new Promise((resolve, reject) => {
pool.getConnection((err, connection) => {
if (err) {
return reject(err);
}
connection.query(sql, params, (err, result) => {
connection.release();
if (err) {
return reject(err);
}
resolve(result);
});
});
});
};
var sql = "INSERT INTO tf_m_section_number VALUES ?";
var datas=new Array();
var pList=new Array();
fs.createReadStream(fPath)
.pipe(csv())
.on("data", function(data){
counts++;
if(count<700)
datas[count++]=data;
// if(count==3)
// console.log(datas);
if(count==700) {
console.log(count);
pList.push(query(sql,[datas]));
//console.log(result);
count=0;
datas.length = 0;
}
// rows[count++]=row;
})
.on("end",function(){
console.log(counts);
console.log("done");
if(count>0){
pList.push(query(sql,[datas]));
// console.log(result);
//return res.send("ok");
}
Promise.all(pList).then(function(result) {
// you code...
return res.send("ok");
});
//
}).on('error',(err)=>{console.log('读取文件时发生异常',err);});
你期待的结果是什么?实际看到的错误信息又是什么?
数据能全部读入数据库,事实上会有些数据丢失了
给个思路,把第一遍插入的表复制一份出来,然后清空原表,再导入一遍,看看前后导入的两表丢失的数据:
若丢失的数据都是一样的,那么单独弄个csv只包含缺失的那部分数据,再试试导入这份csv,看看报什么错;
若丢失的数据很随机,那么还需要再具体看看。