据我所知,Mongooses schema.save()
方法异步是自然。是否可以按顺序在schema.save()
方法之前运行外部函数,以便在外部函数完成处理之前不会调用schema.save()
。
//External function
incrementTotal(req,res);
newSurvey.save(function (err, data) {
if(err) {
sendJsonResponse(res, 400, err)
} else{
console.log("3")
sendJsonResponse(res, 200, data);
}
});
问题:
在某些情况下newSurvey.save
在incrementTotal
完成处理之前运行。我该如何解决这个问题?
答案 0 :(得分:0)
您可以将您的内容保存在incrementTotal回调中。像Promises等这样的图书馆有助于解决这些问题。
incrementTotal(req,function(err,res){
if(!err){
newSurvey.save(function (err, data) {
if(err) {
sendJsonResponse(res, 400, err)
} else{
console.log("3")
sendJsonResponse(res, 200, data);
}
});
}else{
console.log(err);
}
});
答案 1 :(得分:0)
如果您使用async库,则可以使用waterfall
。它需要一系列串行执行的函数,每个函数都将结果传递给数组中的下一个。如果任何任务将错误传递给回调,则不执行下一个函数,并立即调用主回调并显示错误。
async.waterfall([
incrementTotal,
mySaveFunction,
],
function (err, result) {
if (err) {
sendJsonResponse(res, 400, err)
} else {
console.log("3")
sendJsonResponse(res, 200, data);
}
});
function incrementTotal(callback) {
callback(null, data);
}
function mySaveFunction(data, callback) {
// 'data' is the result of incrementTotal
// so this should be newSurvey.save
callback(null, data);
}