【发布时间】:2019-03-22 09:23:26
【问题描述】:
为了更清楚地理解 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)
我明白承诺一经创建就会执行。由于某种原因,我无法理解执行流程。尤其是下面这行:
var result = Promise.resolve()//and empty promise is created.
如果有人可以帮助我理解如何在空承诺的“then”方法中调用 promiseFactory 方法使其按顺序执行,就像这样。还是因为 forEach 循环?
result = result.then(promiseFactory);
我尝试将 'forEach' 替换为 'map' 函数,但仍然产生了相同的结果。即按顺序执行的方法。 另外,值如何从一个链式函数传递到另一个?
非常感谢任何帮助或文章/博客。
【问题讨论】: