Node.js Mongoose post init异步不工作

Node.js Mongoose post init异步不工作,node.js,mongodb,typescript,mongoose,hook,Node.js,Mongodb,Typescript,Mongoose,Hook,Mongoose post“init”显然无法按照文档所述异步执行。我用的是最新的mongoose@5.0.10和@类型/mongoose@5.0.7包裹 schema.post('init', function (doc, next: any) { gunzipJSON(this.zipped).then(obj => { this.categories = deserialize<Category[]>(Category, obj) || [];

Mongoose post“init”显然无法按照文档所述异步执行。我用的是最新的mongoose@5.0.10和@类型/mongoose@5.0.7包裹

schema.post('init', function (doc, next: any) {
    gunzipJSON(this.zipped).then(obj => {
        this.categories = deserialize<Category[]>(Category, obj) || [];
        next();
    });
});
schema.post('init',函数(doc,next:any){
gunzipJSON(this.zip)。然后(obj=>{
this.categories=反序列化(Category,obj)| |[];
next();
});
});
还请注意,我在调用next()时使用了“next:any”以避免下面的TS2349错误。当钩子触发时,this和doc被设置为一个模型。在升级到最新版本之前,我使用的是Mongoose 4.7.21,next按预期提供了一个函数(err),但TS声明肯定是错误的

尽管如此,当init hook函数返回时,mongooseinit调用方不会等待异步解压缩完成,而是立即将文档返回给客户端。解压缩完成后,它会正确地膨胀并反序列化字段,但为时已晚。我做错了什么?我已经尝试了许多钩子参数的排列来触发异步行为,但运气不好。当然,这会发生在你的时间紧迫的时候

更新

我刚刚阅读了5.0发行说明:“init钩子现在是完全同步的,不会将next()作为参数接收。Document.prototype.init()不再将回调作为参数。它始终是同步的,只是出于遗留原因而有一个回调。”


哎呀!如何应用加载后异步钩子?

使用同步版本zlib.gunzipSync()实现了这一技巧。可惜这个钩子不能是异步的。