Mongoose Koa.js:`await`不等待,直到Mongoose的`exec`完成。

时间:2018-03-29 10:57:20

标签: node.js mongodb mongoose koa koa2

我使用最新的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"}]

1 个答案:

答案 0 :(得分:2)

你正在将promises(UI)与回调混合,Mongoose不支持。删除你的回调并仅使用承诺:

await