我正在使用此处找到的'fast-csv'模块(https://www.npmjs.org/package/fast-csv),但我愿意改变它。我尝试过promised-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();
答案 0 :(得分:3)
你需要等待承诺得到解决,你需要传递承诺中的数据, 尝试这样的事情:
var parseCSV = function(){
var d = q.defer();
csv
.fromPath(school+'_export1.csv')
.on('data', function(data){
csvRows.push(data);
})
.on('end', function(){
d.resolve(csvRows);
});
return d.promise;
}
var updateSchedule = function(){
parseCSV.then(function(rows){
//TODO, your code here
});
}
编辑:
尝试将你的承诺链接起来:
deleteRows()
.then(function(){
return parseCSV();
})
.then(function(rows){
//TODO, whatever you need to do with rows
return updateSchedule(rows);
})
.done();
但我更喜欢这样的事情:
deleteRows()
.then(function(){
return parseCSV().then(function(rows){
//Todo your code here
});
}).done();
小心承诺并尽量不要滥用它们。