我怎样才能有数量可观的诺言按顺序解决?与之类似,在完成调用之前要等待一个。
本质上,我希望它们被同步调用,但是在我的环境中不能使用await / async
到目前为止,这是我尝试过的方法,但仅适用于第一个和最后一个被调用的情况:
class MyClass{
constructor(t){
this.time = t
}
load(){
return new Promise(resolve => {
setTimeout( () => {
console.log(this.time);
resolve(this.time);
}, 1000/this.time)
})
}
}
let pChain;
for(i=1; i<5; i++){
if(!pChain){
pChain = new MyClass(i).load();
}else{
pChain = pChain.then( t => new MyClass(i).load())
}
}
pChain.then();
最佳答案
你很亲密您的循环计数器中只有一个错误。更改此:
for(i=1; i<5; i++){
对此:
for(let i=1; i<5; i++){
使用现有代码,将
i
隐式地制成全局var
。您的代码循环遍历,设置了Promise链。然后,当promise开始解析时,i
现在为5,因此除第一个promise外,所有其他最终都使用5代替了预期的数字。如果改用
let
,则每次循环时都会有一个新的变量绑定。因此,每次调用MyClass(i)都会看到自己的正确数字。