我使用最新的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"}]
答案 0 :(得分:2)
你正在将promises(UI
)与回调混合,Mongoose不支持。删除你的回调并仅使用承诺:
await