Javascript 一旦完成CSV阅读,我如何解决承诺?
我正在使用这里()找到的“快速csv”模块,但我愿意改变这一点。我尝试了csv(),但我无法控制它。我还使用了q() 这是一长串承诺函数的一部分,所以我只会用这一个和之后的一个来打扰你Javascript 一旦完成CSV阅读,我如何解决承诺?,javascript,node.js,csv,promise,Javascript,Node.js,Csv,Promise,我正在使用这里()找到的“快速csv”模块,但我愿意改变这一点。我尝试了csv(),但我无法控制它。我还使用了q() 这是一长串承诺函数的一部分,所以我只会用这一个和之后的一个来打扰你 var csvRows=[]; var parseCSV=函数(){ var d=q.defer(); csv .fromPath(学校+“\u export1.csv”) .on('data',函数(data){ csvRows.push(数据); }) .on('end',function(){ 完成=正确
var csvRows=[];
var parseCSV=函数(){
var d=q.defer();
csv
.fromPath(学校+“\u export1.csv”)
.on('data',函数(data){
csvRows.push(数据);
})
.on('end',function(){
完成=正确;
d、 解决();
});
回报承诺;
}
var updateSchedule=函数(){
var d=q.defer();
控制台日志(csvRows);
//csvRows.forEach(函数(行){
//控制台日志(行);
//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+”,函数(错误,行){
//如果(错误){
//控制台日志(err);
//d.拒绝();
// }
// });
// });
d、 解决();
回报承诺;
}
您需要等待承诺得到解决,并且需要传递承诺中的数据,
试着这样做:
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();
编辑:
试着像这样把你的承诺串起来:
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();
但我更喜欢这样的东西:
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();
小心承诺,尽量不要滥用承诺。我有点困惑。对不起,我对承诺不熟悉。“完成”是从哪里来的?我刚刚在我的原始帖子中添加了我的承诺链。在之前调用函数而不是在下一个函数中调用函数有什么区别?我只是复制粘贴了你自己的代码,与之无关,我已经删除了它。它应该是这样的。然后(函数(行){return parseCSV(行)},done包含哪些内容?请记住执行解析并像d.resolve(csvRows)一样传递数据;在您返回承诺的每个链中,它可能处于已解决、未解决和被拒绝的状态,一旦您解决了承诺,您就可以在解决本身中传递数据,这样您就能够在适当的“then”(这是解决承诺时被解雇的偶数),只是要小心不要做太多你可能陷入反模式的承诺看看