Mongoosejs在创建后发布保存

时间:2014-03-19 17:54:35

标签: node.js mongodb mongoose q

我使用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。

1 个答案:

答案 0 :(得分:0)

你需要坚持原始的承诺d.resolve(),直到post hook结束。

我的意思实际上是在MyModel.create方法中等待。你返回d.promise,但不解决它。你等到那里,直到你的帖子挂钩完成,然后解决你的承诺。

现在,如何检查你的postave挂钩是否完成?我不知道。你可以给它一个回调作为一个参数吗?因此,posthook可以在完成后调用此方法,并且您可以解决原始承诺。 另一种方法是在触发posthook之前进行.create方法轮询或其他方法。

现在,至于它为什么不触发,你还需要显示更多的代码。在posthook中有什么?