我认为这很简单,但我似乎无法让它发挥作用。我有两个过程。一个消耗数据,然后另一个装饰它。它们通过队列服务连接。第一个'保存'文档然后排队第二个:
// 'post' is a mongoose object
post.save(function (err) {
if (!err) {
self.decorate('post', post.service, post.id);
}
});
服务2接收队列消息,然后尝试查询队列。但没有找到该项目。该项目已被写入,如果我在几秒钟后重新运行排队的消息,它会正确找到它。
看起来第二个服务正在尝试在写入完成之前运行。
如何强制Mongoose回调同步等待/操作?我尝试在连接选项中添加'safe:true'。
答案 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;
});
}