我认为这很简单,但是我似乎无法让它工作。我有两个进程。一个使用数据,另一个修饰数据。它们通过队列服务连接。第一个进程“保存"文档,然后将第二个进程排队:
// 'post' is a mongoose object
post.save(function (err) {
if (!err) {
self.decorate('post', post.service, post.id);
}
});
服务2收到队列消息,然后尝试查询队列。但是没有找到项目。项目确实被写入,如果我在几秒钟后重新运行队列消息,它会正确地找到它。
看起来第二个服务正在尝试在写入完成之前运行。
如何强制Mongoose回调同步等待/执行?我尝试过在命令行中添加“safe:true'添加到连接选项。
3条答案
按热度按时间3z6pesqy1#
请考虑在保存()方法中使用promise。
imzjd6km2#
处理错误也是很好的,所以下面的代码可以满足你的需要。
如果您只想为保存返回true/false,则执行以下操作:
xt0899hw3#
我遇到了同样的问题。我在程序中使用async/await。首先我检查是否可以建立连接。连接也会返回一个promise。建立连接后,我将一个新的帖子保存到数据库中,并返回保存的帖子,因为我想在编辑页面中显示保存的帖子,我需要新创建的ID。
我的路由器如下所示:
我的控制器如下所示:
我的服务如下所示:
这些承诺被链接起来,因此服务等待直到帖子被保存,然后继续显示可被修改的编辑页面。