私は、約束が遂行されたり拒否されたりすることはないので、JavaScriptランタイムは単に終了し、await
のコードは決して実行されないため、次のスニペットが永遠にハングすることを期待していました。上記にも動的起こることより悪い何空のJavaScript Promiseを待っていると、ランタイムが有効に保たれません。
(async function() {
console.log('so far so good');
await new Promise(() => {});
console.log('never printed');
})();
プロミスが生きランタイムを保つ/満たすだけで、次の例のために、特定のイベントの後に拒否することが不可能になった場合つまり、あります
(async function() {
console.log('so far so good');
await new Promise((fulfill, reject) => {
const timeout = setTimeout(fulfill, 2000);
setTimeout(() => {
clearTimeout(timeout);
}, 1000);
});
console.log('never printed');
})();
これは背後にある理由は何ですか?もっと重要なのは、この振る舞いを扱うドキュメント/スペックにリンクすることができますか?
申し訳ありませんが、私は本当にそれを取得しません。 *ブロッキング*とはどういう意味ですか? – Vinz243
もっと重要なのは、1秒間しかブロックされていないことが示され、残りは実行されません。 – Vinz243
"ブロックする"と "ランタイムが生きている"と混同していると思います。 – Bergi