次のループを見てください。
_for(var i=0; i<100; ++i){
let result = await some_slow_async_function();
do_something_with_result();
}
_
await
はループをブロックしますか?または、i
がawait
ingしている間、引き続き増加しますか?
do_something_with_result()
の順序は、i
に関してシーケンシャルですか?それとも、await
ed関数が各i
に対してどれだけ高速かによって異なりますか?
これはこの興味深い質問についての私のテストソリューションです:
import crypto from "crypto";
function diyCrypto() {
return new Promise((resolve, reject) => {
crypto.pbkdf2('secret', 'salt', 2000000, 64, 'sha512', (err, res) => {
if (err) {
reject(err)
return
}
resolve(res.toString("base64"))
})
})
}
setTimeout(async () => {
console.log("before await...")
const a = await diyCrypto();
console.log("after await...", a)
}, 0);
setInterval(() => {
console.log("test....")
}, 200);
SetTimeoutのコールバック内では、await
が実行をブロックします。ただし、setInterval
は引き続き実行されるため、イベントループは通常どおり実行されます。