我怎样才能有数量可观的诺言按顺序解决?与之类似,在完成调用之前要等待一个。

本质上,我希望它们被同步调用,但是在我的环境中不能使用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)都会看到自己的正确数字。

09-11 01:01