问题
考虑以下使用 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( 返回 Promise.resolve('C') Promise ) 第 4 行的处理程序将链接承诺链并产生预期的顺序执行顺序。
以上是为什么 JavaScript Promise 执行顺序不像预期的那样是线性的?的详细内容。更多信息请关注PHP中文网其他相关文章!