我不是在寻找如何按顺序执行 promise 的解决方案,我只是试图理解博客作者给出的解决方案:
我正在阅读"We have a problem with promises"作者:Nolan Lawson,发布于 2015 年 5 月 18 日。
在“高级错误#3: promise 与 promise 工厂”下,他有一个应该是有效的示例:
// Setup, just a meta explanation what a function looks like
function promiseFactory() {
return somethingThatCreatesAPromise();
}
// Actual example; promiseFactories could be an Array
function executeSequentially(promiseFactories) {
var result = Promise.resolve();
promiseFactories.forEach(function (promiseFactory) {
result = result.then(promiseFactory);
});
return result;
}
我不明白为什么会这样。 forEach
一次执行所有函数。 result
将是一个已解决的 Promise,因此 promiseFactory
会立即运行?
我不明白这段代码如何确保 promiseFactory
函数中的代码按顺序运行。
最佳答案
forEach
executes all functions at once
不,它一个接一个地运行它们。 forEach
是非异步。
让我们看一个迭代示例:
// The first result is already resolved, so as to allow
// the first 'then' to trigger
var result = Promise.resolve();
promiseFactories.forEach(function (promiseFactory) {
// First iteration: result = ResolvedPromise.then(promiseFactory)
// Second iteration result = promiseFactoryResult.then(nextPromiseFactory);
// and so on...
result = result.then(promiseFactory);
});
因此,它一个接一个地循环遍历类似数组的对象,将 nextPromiseFactory
创建的 Promise 结果链接到 result
变量上。
本质上与执行相同:
var result = Promise.resolve().then(promiseFactory).then(promiseFactory).then(promiseFactory);
关于javascript - 按顺序执行Promise : understanding a claim made about this example code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803557/