問題
Promise を使用する次の JavaScript コードを考えてみましょう:
<code class="javascript">Promise.resolve('A') .then(function(a){console.log(2, a); return 'B';}) .then(function(a){ Promise.resolve('C') .then(function(a){console.log(7, a);}) .then(function(a){console.log(8, a);}); console.log(3, a); return a;}) .then(function(a){ Promise.resolve('D') .then(function(a){console.log(9, a);}) .then(function(a){console.log(10, a);}); console.log(4, a);}) .then(function(a){ console.log(5, a);}); console.log(1); setTimeout(function(){console.log(6)},0);</code>
出力は次のとおりです。
<code class="text">1 2 "A" 3 "B" 7 "C" 4 "B" 8 undefined 9 "D" 5 undefined 10 undefined 6</code>
質問は実行順序、特に数値 1、2、3、7 などに関するものです。予想される線形順序 1、2、3、4、... ではないのはなぜですか?
JavaScript Promise は特定の実行ルールに従います。
指定されたコード内:
.then() ハンドラー内で作成された独立した Promise チェーンには予測可能な実行順序がないため、3、7、4、8、9、5、10 の順序は特定の Promise エンジンの実装。
非同期操作の特定の実行順序を確保するには、次のことをお勧めします。
指定された例では、.then( ) 4 行目のハンドラーは Promise チェーンをリンクし、予想される順次実行順序になります。
以上がJavaScript Promise の実行順序が予想どおりに直線的ではないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。