我正在阅读有关javascript promises(https://developers.google.com/web/fundamentals/getting-started/primers/promises)的文档,其中一个示例使用了一系列承诺。
// 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序列时开始执行代码。当我调试代码时,承诺序列没有被执行,直到最后一行代码在脚本标记内执行。所以我的问题是什么时候承诺真的被执行了?谢谢。
答案 0 :(得分:2)
有关承诺的执行上下文的详细说明,请参阅this post:
所有.then()处理程序在当前执行线程完成后异步调用(如Promises / A +规范所述,当JS引擎返回“平台代码”时)。即使对于同步解析的Promise也是如此,例如Promise.resolve()。then(...)。这是为了编程一致性,因此无论是立即解决还是稍后解决,都会异步调用.then()处理程序。这可以防止一些计时错误,并使调用代码更容易看到一致的异步执行。