在路径中保存两个文档,导致文档以反向顺序保存

时间:2017-09-28 13:29:53

标签: node.js mongoose

在节点路线中,我保存了两个不同模型的文档,但不是按照代码中的顺序保存(通过自上而下的方法),它们将以相反的顺序保存。 / p>

modelOneDoc.save().then((doc) => console.log('Model One Document saved'));
modelTwoDoc.save().then((doc) => console.log('Model Two Document saved'));

输出:

Model Two Document saved
Model One Document saved

两个模型的模式都附加了pre save call,在保存文档之前会进行一些计算。而且我认为它的前调用会扰乱储蓄令。

在ModelTwoDoc之前保存ModelOneDoc是必不可少的,因为ModelTwoDoc在其预保存调用中获取ModelOneDoc。 帮我解决问题。

GitHub Repo here(路线:/ exam / submit /:id)

修改 代码片段如下:

request.body.questionAnswers.forEach((element, index) => {
        var questionAnswer = new QuestionAnswer({exam: id});
        examReturn.questionAnswers.push(questionAnswer._id);
        questionAnswer.save().catch((error) => console.log(error));
    });

    examReturn.save().then(() => response.send('Exam Successfully submitted in Store'), (error) => response.status(400).send(error));

我在循环中有第一次保存调用,我希望在循环中的所有文档都有第二次调用(examReturn.save())之后已存储。

我无法使用嵌套模型的解决方案,然后在此处调用,因为第二个模型将首先保存,然后调用已加载的文档。

很抱歉提前提供的数据不足。

1 个答案:

答案 0 :(得分:0)

如果save函数是异步的,则必须将第二个模型保存在第一个模型的函数中:

modelOneDoc.save().then(function(doc) {
    console.log('Model One Document saved')
    modelTwoDoc.save().then(function(doc) {console.log('Model Two Document saved')})
})

这样,第二个模型将在第一个模型之后保存。