![](/img/trans.png)
[英]JS async/await doesn't wait for my functions to resolve their promise
[英]Why my async function doesn't await to the Promise in JavaScript?
我的代碼如下:
const match = async (tender, searchCriteria) => {
const tenderAccount = await tenderAccountController.findOrCreate(
tender,
searchCriteria,
);
if (searchCriteria.emailFrequency !== 'real-time') {
return null;
}
// Notify Stakeholders
await notifyStakeholders(tender, tenderAccount, searchCriteria);
};
這個 function “匹配”在 for 循環中被調用 [for (const searchCriteria of searchCriterias) {}]
findOrCreate function 如下:
exports.findOrCreate = async (tender, searchCriteria) => {
console.log("Search Criteria Name: " + searchCriteria.name)
console.log("Tender Name: " + tender.name)
// Check if it already exists
let doc = await TenderAccount.findOne({
tender: tender._id,
account: searchCriteria.account._id
})
console.log("Doc: " + doc)
if(doc) {
// If it exists, update searchCriterias
await TenderAccount.updateOne({ _id: doc._id }, { $addToSet: { searchCriterias: searchCriteria } })
return doc;
} else {
doc = await TenderAccount.create({
tender,
account: searchCriteria.account,
searchCriterias: [searchCriteria],
dueDate: tender.submissionDeadlineDate
})
return doc;
}
};
我的問題是它不等待 findOne 查詢。 它只是完成所有初始循環(searchcriteria 循環),當循環結束時它返回查詢結果。 在我的控制台中,我得到了這個:
Search Criteria Name: test-sc
Tender Name: test-tender
Search Criteria Name: test2-sc
Tender Name: test2-tender
Search Criteria Name: test3-sc
Tender Name: test3-tender
Doc: null
Doc: null
Doc: null
而且我不明白,它應該在招標名稱 console.log 之后對文檔進行 console.log,對嗎?
我會很感激你的回答。
當您在不調用await
的情況下調用async
function 時,它將繼續執行而無需等待 promise 被解析。 因此,如果您的 for 循環看起來像: for (...) match(...)
而不是for (...) await match(...)
,它將一個接一個地立即執行所有匹配,因此為什么Search Criteria Name
和Tender Name
都排在最前面。
將await
添加到match
調用中應該會給出您期望的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.