【发布时间】:2017-01-05 21:14:46
【问题描述】:
我有需要同步工作的承诺对象。例如,在第一个承诺完成之前,第二个承诺不应该起作用。如果第一个拒绝第一个必须再次执行。
我已经实现了一些示例。这个效果很好。 调用getVal,等待2000ms,返回,i++,再次调用getVal.....
getVal() {
return new Promise(function(resolve, reject) {
setTimeout(function(){ resolve(19) }, 2000);
});
}
async promiseController(){
for(var i =0;i<5;i++)
{
var _val = await this.getVal()
console.log(_val+'prom');
}
}
但我需要控制一组 promise 对象。我想要做的是我有一个数据,我把它分成了5块。处理好第一部分(例如:发送到服务器)后,我想处理第二部分,否则我必须再次处理第一部分。
这是我做的原型实现
getVal() {
return new Promise(function(resolve, reject) {
setTimeout(function(){ resolve(19) }, 2000);
});
}
async promiseController(){
var proms=[]
for(var i =0;i<5;i++)
{
proms.push(this.getVal())
}
for(var i =0;i<5;i++)
{
var _val = await proms[i]
console.log(_val+'prom');
}
}
此代码中的 Promises 对象按顺序工作。如何修复下面的代码,使其作为第一个示例同步工作。
【问题讨论】:
-
我不知道您是在尝试做
Promise.all(),还是希望您的承诺做更多的瀑布类型的事情。 -
promise.all() 对我不起作用。它在一个承诺失败后拒绝这条线。在我的情况下,我必须让它们全部工作,否则它是没用的。
-
如果返回第一个promise的递归调用没有解决,预期的结果是什么?
-
是什么阻止了第一个承诺无限期地重新运行?
-
@guest71314 var i in for 将被减少,第一个 promise 将再次被触发
标签: javascript promise ecmascript-2017