如何克服此异步代码并在回调之间传递值?
这里的totalfee变量在第一个回调中设置,但在第二个回调中无法访问。
var totalfee;
SetFee.find({standard:standard}, function(error,document){
totalfee = document[0].totalfee;
CollectFee.find({ssn:ssn}, function(error,document){
if(typeof(document[0])=='undefined'){
let paidfee=0;
var cfee = new CollectFee({
ssn:ssn,
paidfee:paidfee
});
cfee.save();
}
else {
showpaid=document[0].paidfee;
console.log(ssn,name,totalfee,showpaid);
res.redirect('/fees/cfees?ssn='+ssn+'&name='+name+'&totalfee='+totalfee+'&paidfee='+showpaid);
}
});
});
最佳答案
也许这些指针会引导您到达某个地方。
(1) 使用 findOne
因为您需要一个文档。
(2) 为变量使用更好的名称,例如文档
不明确。
(3) 添加console.log
语句进行调试。
(4) 检查 err
以查看是否出现任何错误可能是个好主意。通常错误仅在插入/更新/删除时发生。
SetFee.findOne({ standard: standard }, function (err, setFee) {
console.log('setFee', setFee)
let totalfee = setFee.totalfee;
CollectFee.findOne({ ssn: ssn }, function (err, collectFee) {
console.log('collectFee', collectFee)
if (!collectFee) {
// use of return is to stop the 'else' part from executing
return CollectFee.create({ ssn: ssn, paidfee: 0 }, function (err, collectFee) {
// do something here or your route handler will hang!
});
}
let showpaid = collectFee.paidfee;
console.log(ssn, name, totalfee, showpaid);
res.redirect('/fees/cfees?ssn=' + ssn + '&name=' + name + '&totalfee=' + totalfee + '&paidfee=' + showpaid);
});
});
关于javascript - 嵌套回调异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44631025/