如何在nodejs中同步调用包含mongoose查询的多个函数?

时间:2017-07-26 12:06:05

标签: node.js asynchronous mongoose-schema

我想按顺序执行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)
    });
});
}

如何解决此问题?

1 个答案:

答案 0 :(得分:0)

您需要让代码等到一个promise完成后再启动下一个promise,使用bluebird.eachasync库或下一个回调队列。该句子的第一部分可能听起来像 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();
        });
    }