我有以下功能。它獲得一組屬性,並將循環遍歷它們以將每個屬性放入數據庫中。但循環將與await
聲明自動殺:爲什麼要「等待」在現代Javascript中打破或殺死for循環?
async function importAttributeRecords(attributeValues, languageId, attributes, dataStorage, tx) {
for(let attr of attributes) {
console.log("Persist", attr)
try {
await importAttributeRecord(attributeValues, languageId, attr, dataStorage, tx)
}
catch(err) {
console.log(err);
}
console.log("After persisting");
}
}
到await
的第一次調用將被執行,但之後的第二console.log
聲明將不會出現。 此外,循環將立即退出。
即使返回承諾,如何在同一個循環中同步執行像importAttributeRecord()
這樣的函數? 爲什麼使用「等待」循環危險?
你的意思是跟第二個日誌調用一個輸出:''在保持後''?拋出異常嗎? – k0pernikus
需要更多[mcve]。 – melpomene
循環未被殺死。它被擱置,當你「等待」承諾時會恢復。承諾是異步的。您不能將它們視爲同步。 –