[英]async await not waiting for resolve
所以,我是我的 nodeJS 項目,我有這部分代碼,不是在等待 await 調用
控制器.js
exports.getList = async function(request, response) {
try {
const result = await useCase.getList()
if (result == undefined) {
utils.unavailable(response)
}
else if (result == null || result.length == 0) {
utils.respond(response, 404, errCodes.NOT_FOUND)
}
else utils.respond(response, 200, result)
}
catch(e) {
utils.unavailable(response)
}}
這是控制器上的函數,它調用來自用例的響應
用例.js
exports.getList = async function() {
return await new Promise(function(resolve) {
resolve(repository.getList())
})
這也調用存儲庫
資源庫.js
exports.getList = async function() {
MongoClient.connect(Constants.DB_URL, function(err, db) {
if (err) {
console.log(err)
return undefined
}
const dbo = db.db(Constants.DB_NAME)
dbo.collection(Constants.DB_FEATURE1_COLLECTION).find({}).toArray(function(err, result) {
if (err) {
console.log(err)
return undefined
}
db.close()
return result
})
});
因此,發生的情況是,在控制器上,結果始終未定義,因為結果尚未初始化,而實際上它應該等待 UseCase 上 Promise 的響應。 那么我做錯了什么?
getList
函數沒有 return 語句,因為它是async
所以它返回一個總是用undefined
解析的 Promise。 我對MongoClient
不是很熟悉,但文檔說如果沒有指定回調,它會返回一個承諾。 所以你可以改變你的代碼:
exports.getList = async function () {
try {
const db = await MongoClient.connect(Constants.DB_URL);
const dbo = db.db(Constants.DB_NAME);
const result = await dbo.collection(Constants.DB_FEATURE1_COLLECTION).find({}).toArray();
db.close();
return result
} catch (err) {
console.log(err);
return undefined
}
};
和用例.js:
exports.getList = function() {
return repository.getList(); // it returns a Promise there is no need to wrap it in async
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.