我想按顺序执行4个功能。每个功能都是以下格式。像创建更新删除和显示。我想在完成其他3个功能后调用显示功能。我尝试了promise方法但没有任何db调用它正在按顺序工作。当发生mongoose调用时,顺序正在改变。
function createProjects(req) {
var projects = req.body.created;
projects.forEach(function (project) {
var newProject = new ProjectSchema(project);
newProject.save(function (error, object) {
if (error) {
console.log(error)
}
console.log(object)
});
});
}
如何解决此问题?
答案 0 :(得分:0)
您需要让代码等到一个promise完成后再启动下一个promise,使用bluebird.each
,async
库或下一个回调队列。该句子的第一部分可能听起来像 duh 那样,但是在node.js中.save
将始终立即返回,无论何时执行回调(使其不太明显)代码)。
以下是bluebird.each
的示例我试图坚持您在示例代码中使用的代码样式。
var Promise = require('bluebird');
function createProjects(req) {
var projects = req.body.created;
return Promise.each(projects, function (project) {
return new ProjectSchema(project).save();
});
}