一一完成后承诺请求

Promise request after finishing one by one

我已经使用 Promise.all() 来获取每个请求。

但是我收到服务器报错,因为我请求的数组数量超过了100,所以我在短时间内请求了太多的调用。

如何改进我的 Promise 代码以在完成第一个请求后调用下一个请求?

 public getProfits(data) {
    return Promise.all(
      data.map((obj) => {
        return this.getProfit(obj.symbol).then(rawData => {
          obj.stat = rawData
          return obj;
        });
      })
    ).then(data => {
      this.data = this.dataService.ascArray(data, 'symbol')
    })
  }

我认为你可以利用 async/await

它可能不是您所需要的,但您可以对其进行微调。

了解 async/await here

public async getProfits(data) { // add async here
    let responses = [];
    for (let i = 0; i < data.length; i++) {
      let response = await this.getProfit(data[i].symbol);
      console.log(response);
      responses.push(response);
    }
    this.data = this.dataService.ascArray(responses, 'symbol');
  }

如果您的环境允许使用 async/await,最简单的解决方案可能是:

public async getProfits(data) {
  for(const obj of data) {
    obj.stat = await this.getProfit(obj.symbol);
  }
  this.data = this.dataService.ascArray(data, 'symbol');
}

否则您可能需要这样做:

public getProfits(data) {
  let p = Promise.resolve();

  for(const obj of data) {
    p = p.then(() => {
       return this.getProfit(obj.symbol).then(rawData => obj.stat = rawData);
    });
  }
  p.then(() => {
    this.data = this.dataService.ascArray(data, 'symbol');
  });
}