强制mongoose.save回调等待写入完成

时间:2014-12-12 16:03:55

标签: javascript node.js mongodb mongoose synchronous

我认为这很简单,但我似乎无法让它发挥作用。我有两个过程。一个消耗数据,然后另一个装饰它。它们通过队列服务连接。第一个'保存'文档然后排队第二个:

// 'post' is a mongoose object

post.save(function (err) {
    if (!err) {
        self.decorate('post', post.service, post.id);
    }
});

服务2接收队列消息,然后尝试查询队列。但没有找到该项目。该项目已被写入,如果我在几秒钟后重新运行排队的消息,它会正确找到它。

看起来第二个服务正在尝试在写入完成之前运行。

如何强制Mongoose回调同步等待/操作?我尝试在连接选项中添加'safe:true'。

2 个答案:

答案 0 :(得分:1)

请考虑在save()方法中使用promise。

post.save().then(function (savedPost) {
    self.decorate('post', savedPost.service, savedPost.id);
});

答案 1 :(得分:1)

也可以处理错误。因此,以下代码将满足您的目的。

yourModel.save().then(function(savedData){
    // do something with saved data
}).catch(function(err){
    // some error occurred while saving, like any required field missing
    throw new Error(err.message);
});

如果您只想返回true / false进行保存,请执行类似的操作

someFunction() {
    return yourModel.save().then(function(savedData){
        return true;
    }).catch(function(err){
        return false;
    });
}