【发布时间】:2023-04-09 21:34:01
【问题描述】:
我正在使用此处的“fast-csv”模块 (https://www.npmjs.org/package/fast-csv),但我愿意更改它。我尝试了 promise-csv (https://www.npmjs.org/package/promised-csv),但我无法理解它。我也在使用 q (https://www.npmjs.org/package/q)。
这是一长串承诺功能的一部分,所以我只会用这个和紧随其后的那个来打扰你。
var csvRows = [];
var parseCSV = function(){
var d = q.defer();
csv
.fromPath(school+'_export1.csv')
.on('data', function(data){
csvRows.push(data);
})
.on('end', function(){
done = true;
d.resolve();
});
return d.promise;
}
var updateSchedule = function(){
var d = q.defer();
console.log(csvRows);
// csvRows.forEach(function(row){
// console.log(row);
// connection.query('INSERT INTO schedule SET section_id = "'+data[0]+'", student_id = "'+data[1]+'", course_number = "'+data[2]+'", period = "'+data[3]+'", teacher_id = "'+data[4]+'", school_id = "'+school_id+'"', function(err, rows){
// if(err){
// console.log(err);
// d.reject();
// }
// });
// });
d.resolve();
return d.promise;
}
当我在 .on('data') 方法中使用 console.log(csvRows) 时,它会单独记录每一行,这是应该的。如果我随后使用 .on('end') 方法中的 console.log(csvRows),它会立即记录整个数组。完美的。然后我尝试在这里解决承诺,但是当它移动到下一个函数并尝试 console.log(csvRows) 时,我得到一个空数组。所以我知道承诺实际上并没有解决,但我不太确定如何解决它。非常感谢您的帮助!
编辑:这是我的承诺链:
deleteRows()
.then(function(){
parseCSV();
})
.then(function(){
updateSchedule();
})
.done();
【问题讨论】:
标签: javascript node.js csv promise