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;
};
我正在使用最新的 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;
};