Ben*_*vis 20 javascript promise
我有一个返回promise的库中的函数.我需要多次运行此函数,但每次迭代必须等到上一个任务完成.
我的假设是我能做到这一点:
promiseReturner(1)
.then(promiseReturner(2)
.then(promiseReturner(3)
.then(...)
Run Code Online (Sandbox Code Playgroud)
可以使用循环简化:
var p = Promise.resolve();
for (var i=1; i<=10; i++) {
p = p.then(promiseReturner(i));
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,链中的每个承诺都会同时执行,而不是一个接一个地执行,.then()似乎意味着.显然,我遗漏了一些关于承诺的基本信息 - 但在阅读了几篇教程和博客文章后,我仍然迷失了.
Fel*_*ing 23
您的"非循环"解决方案也不应该起作用.你必须通过一个函数来.then,而不是一个承诺:
var p = Promise.resolve();
for (var i=1; i<=10; i++) {
(function(i) {
p = p.then(function() {
return promiseReturner(i);
});
}(i));
}
Run Code Online (Sandbox Code Playgroud)
如果该函数返回一个promise,那么你将获得该链接效果.
有关MDN上的 promises的更多信息.
可以用let(和箭头功能)简化:
var p = Promise.resolve();
for (let i=1; i<=10; i++) {
p = p.then(() => promiseReturner(i));
}
Run Code Online (Sandbox Code Playgroud)
或者.bind(这是ES5):
var p = Promise.resolve();
for (var i=1; i<=10; i++) {
p = p.then(promiseReturner.bind(null, i));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12632 次 |
| 最近记录: |