我使用Q promise库来链接查询。我有post hook添加到新文档的新属性。
MyModel.create(data)
.then(function(data) {
// <------------------ post hook has not been triggered yet
return MySchema.findById(data._id); // trying to get the new document
})
.then(function(data) {
// <------------------ post hook has not been triggered yet
reply(null, data); // <- my callback
});
.done()
// <------------------ post hook has triggered!!!
在钩子未触发后创建新文档后,在节点控制台中,我看到它在此链结束后触发。
如何在返回新文档之前确保发布挂钩触发器?
UPDATE:我的postave挂钩是异步的,而mongoose并没有等待它。没有EventEmitter,没有其他方法可以使用post hook。
答案 0 :(得分:0)
你需要坚持原始的承诺d.resolve(),直到post hook结束。
我的意思实际上是在MyModel.create
方法中等待。你返回d.promise,但不解决它。你等到那里,直到你的帖子挂钩完成,然后解决你的承诺。
现在,如何检查你的postave挂钩是否完成?我不知道。你可以给它一个回调作为一个参数吗?因此,posthook可以在完成后调用此方法,并且您可以解决原始承诺。 另一种方法是在触发posthook之前进行.create方法轮询或其他方法。
现在,至于它为什么不触发,你还需要显示更多的代码。在posthook中有什么?