为了更清楚地理解Promise,我阅读了一些相关的文章。我发现以下代码可以完美地按顺序执行Promise,但我不太明白它是如何工作的。
function doFirstThing(){
return new Promise(function(resolve,reject){
setTimeout(()=>{
resolve(1);
},1000)
})
}
function doSecondThing(res){
return new Promise(function(resolve,reject){
setTimeout(()=>{
resolve(res + 1);
},1000)
})
}
function doThirdThing(res){
return new Promise(function(resolve,reject){
setTimeout(()=>{
resolve(res + 2);
},1000)
})
}
promiseFactories = [doFirstThing, doSecondThing, doThirdThing];
function executeSequentially(promiseFactories) {
var result = Promise.resolve(); // this is the most problematic line
promiseFactories.forEach(function (promiseFactory) {
result = result.then(promiseFactory);// what is happening here ?
});
return result;
}
executeSequentially(promiseFactories)
我理解 Promise 会在创建时立即执行。但是我不太理解执行的流程,特别是下面这行代码:
var result = Promise.resolve()//and empty promise is created.
请问是否有人能够帮助我理解为什么在空承诺的“then”方法中调用promiseFactory方法可以使其按顺序执行,就像这样。还是因为forEach循环的缘故?
result = result.then(promiseFactory);
我尝试使用'map'函数替换'forEach',但仍然得到了相同的结果。即方法按顺序执行。 另外,如何将值从一个链接的函数传递给另一个函数?
非常感谢您提供任何帮助或文章/博客。
await
同步解析承诺。 - ttulkaPromise.all
异步等待所有 Promise 完成,然后按照参数给定的顺序将解决结果作为数组返回。 - ttulka