私は以下の機能を持っています。これは属性の配列を取得し、ループ内で繰り返し処理して、すべての単一の属性をデータベースに格納します。しかし、ループがawait
文で自動的に殺される:現代のJavascriptでfor-loopを "中断"してしまうのはなぜですか?
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()
のような機能をループで同期的に実行するには、どうすれば約束を返すことができますか? そしてなぜ "await"をループに使うのが危険ですか?
2つ目のログを出力して、それを出力することを意味しますか?例外がスローされますか? – k0pernikus
さらに[mcve]が必要です。 – melpomene
ループは強制終了されません。それは保留になり、約束を待っているときに再開します。約束は非同期です。それらを同期として扱うことはできません。 –