Jac*_*ile 6 hook mongoose mongodb node.js typescript
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();
});
});
Run Code Online (Sandbox Code Playgroud)
还要注意我使用“next: any”来避免下面调用next() 时出现 TS2349 错误。当钩子触发时, this 和 doc 被设置为一个模型。在我升级到最新版本之前,我使用的是 Mongoose 4.7.21 并且next按预期提供了一个函数(错误),但 TS 声明一定是错误的。
尽管如此,当 init 钩子函数返回时,Mongoose init 调用者不会等待我的异步解压缩完成并立即将文档返回给我的客户端。解压完成后,它会正确地膨胀和反序列化该字段,但为时已晚。我究竟做错了什么?我已经尝试了大量的钩子参数排列来触发异步行为而没有运气。当然,当您处于时间紧缩状态时会发生这种情况!
更新:
我刚刚阅读了 5.0 发行说明 https://github.com/Automattic/mongoose/blob/master/migrating_to_5.md:“init 钩子现在完全同步并且不接收 next() 作为参数。Document.prototype.init () 不再将回调作为参数。它始终是同步的,只是出于遗留原因有一个回调。”
哎呀!如何应用加载后异步钩子?