JavaScript Promise何时执行

4

我正在阅读一份关于JavaScript Promise的文档(https://developers.google.com/web/fundamentals/getting-started/primers/promises),其中一个例子使用了Promise序列。

// Start off with a promise that always resolves
var sequence = Promise.resolve();

// Loop through our chapter urls
story.chapterUrls.forEach(function(chapterUrl) {
  // Add these actions to the end of the sequence
  sequence = sequence.then(function() {
    return getJSON(chapterUrl);
  }).then(function(chapter) {
    addHtmlToPage(chapter.html);
  });
})

我很好奇它是如何工作的,因为我认为当第一个.then被添加到promise序列中时,它会开始执行代码。 当我调试代码时,promise序列要等到脚本标签内的最后一行代码执行完毕才会执行。那么我的问题是,什么时候才实际执行promises?谢谢。


你编写的脚本是完整的吗?因为如果是这样的话,很明显.then将会在所有操作执行完成后才会执行。 - Aakash Verma
请查看此链接:https://dev59.com/eloU5IYBdhLWcg3w_KiO - Khauri
1个回答

3

参见这篇文章,对promise的执行上下文有很好的解释:

所有的.then()处理程序在当前执行线程完成后异步调用(正如Promises/A+规范所说,当JS引擎返回到“平台代码”时)。即使像Promise.resolve()这样同步解析的promise也是如此。这样做是为了编程一致性,以便无论promise是立即还是稍后解决,.then()处理程序都可以一致地异步调用。这可以避免一些时间相关的错误,并使调用代码更容易看到一致的异步执行。


“如果一个 Promise 已经被解决,那么在调用时 .then() 回调函数会立即执行。”这是不正确的。Promise.resolve().then(() => console.log(1)); console.log(2); - Ry-
2
@Ryan 你是正确的(我误解了)。我进行了更多的研究,并更新了我的答案。 - Blue
1
@FrankerZ 这正是我正在寻找的。谢谢! - Wade73

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接