我正在使用此处找到的“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 )。
这是一长串已 promise 功能的一部分,所以我只会用这个和紧接着的一个来打扰你。
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),它会立即记录整个数组。完美的。然后我尝试在这里解决 promise ,但是当它移动到下一个函数并且我尝试 console.log(csvRows) 我得到一个空数组。所以我知道 promise 实际上并没有解决,但我不太确定如何解决它。非常感谢您的帮助!
编辑:这是我的 promise 链:
deleteRows()
.then(function(){
parseCSV();
})
.then(function(){
updateSchedule();
})
.done();
最佳答案
你需要等待 promise 得到解决,你需要在 promise 中传递数据, 尝试这样的事情:
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
});
}
编辑:
尝试像这样链接你的 promise :
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();
小心 promise ,尽量不要滥用它们。
关于javascript - CSV 阅读完毕后,我该如何解决 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27045016/