Mongoose post init async无法正常工作

时间:2018-03-18 15:22:35

标签: node.js mongodb typescript mongoose hook

Mongoose post' init'显然无法像记录的那样异步执行。我使用的是最新的mongoose@5.0.10和@ types / mongoose @ 5.0.7软件包。

schema.post('init', function (doc, next: any) {
    gunzipJSON(this.zipped).then(obj => {
        this.categories = deserialize<Category[]>(Category, obj) || [];
        next();
    });
});

另请注意我使用&#34; next:any&#34;在调用 next()时避免出现TS2349错误。当钩子触发时,this和doc被设置为模型。在我升级到最新版之前,我正在使用Mongoose 4.7.21并且 next 按预期提供了函数(错误),但TS声明一定是错误的。

但是,当init hook函数返回时,Mongoose init调用者不会等待我的异步解压缩完成并立即将文档返回给我的客户端。解压缩完成后,它会正确地对字段进行膨胀和反序列化,但为时已晚。我究竟做错了什么?我已经尝试了很多钩子参数的排列,以便在没有运气的情况下触发异步行为。当然,当你在时间紧迫的时候会发生这种情况!

更新

我刚刚阅读了5.0发行说明https://github.com/Automattic/mongoose/blob/master/migrating_to_5.md:&#34; init挂钩现在完全同步,并且不接收next()作为参数。 Document.prototype.init()不再将回调作为参数。它始终是同步的,只是因遗留原因而进行了回调。&#34;

糟糕!如何应用post load async hooks?

0 个答案:

没有答案