Mongoose Koa.js : `await` 不会等到 Mongoose 的 `exec` 完成。

Mongoose Koa.js : `await` does not wait untill `exec` of Mongoose is complete.

我正在使用最新的 Koa.js 和 Mongoose。

我正在使用 Mongoose 的 exec 在数据作为响应发送之前转换数据。
我发现每当我使用 exec 时,它都不会等待 exec 完成后再发送响应,并且 exec 在响应发出后完成。

我该如何解决这个问题?

以下是我的代码。

航线代码:

 router.post("/", async ctx=>{
    console.log("data route");
    const datas = await controller.get();
    console.log("AFTER data get", datas);
    ctx.body = datas;
});

控制器代码:

exports.get = async ()=>{
    console.log("data get");
    return await dataModel.find().lean().exec(function(err, docs){
        if(err){console.log(err);}
        console.log("inside exec");
        docs = new DataClass(docs);
        console.log(docs);
    });
};

控制台日志打印如下:

data route
data get
AFTER data get undefined
inside exec
[{name:"test1"}, {name:"test2"}]

您将承诺 (await) 与回调混合在一起,Mongoose 不支持回调。删除回调并仅使用承诺:

exports.get = async () => {
    console.log("data get");

    const docs = await dataModel.find().lean().exec()

    console.log("after exec");
    const dataDocs = new DataClass(docs);

    console.log(dataDocs);
    return dataDocs;
};