【问题标题】:Dynamically chained/hierarchical Promises动态链接/分层承诺
【发布时间】:2019-01-17 16:53:01
【问题描述】:

如何让动态数量的 Promise 按顺序解析?例如,在被调用之前等待一个完成。

本质上我希望它们被同步调用,但我不能在我的环境中使用 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();

【问题讨论】:

    标签: javascript ecmascript-6 es6-promise


    【解决方案1】:

    你很亲密。您的循环计数器中只有一个错误。改变这个:

    for(i=1; i<5; i++){
    

    到这里:

    for(let i=1; i<5; i++){
    

    使用您现有的代码,i 被隐式地制成一个全局 var。您的代码循环通过,设置承诺链。然后当 Promise 开始解析时,i 现在是 5,因此除了第一个 Promise 之外的所有最终都使用 5 而不是预期的数字。

    如果你改用let,那么每次循环都会有一个新的变量绑定。所以每次调用 MyClass(i) 都会看到它自己的正确号码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-15
      • 2023-01-27
      • 2015-01-21
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多