Saya telah menggunakan Promise.all() untuk mendapatkan setiap permintaan. Tetapi saya mendapat pesan kesalahan dari server bahwa saya meminta terlalu banyak panggilan dalam waktu singkat karena jumlah array yang saya minta lebih dari 100. Bagaimana ...

0
Ellen Mina Kim 5 April 2021, 18:42

2 jawaban

Jawaban Terbaik

Jika lingkungan Anda memungkinkan untuk menggunakan async/menunggu, solusi paling sederhana mungkin ini:

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

Jika tidak, Anda mungkin perlu melakukan ini:

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');
  });
}
1
kevlatus 5 April 2021, 16:02

Saya pikir Anda dapat memanfaatkan async/await.

Ini mungkin tidak persis seperti yang Anda butuhkan tetapi Anda dapat menyesuaikannya dengan baik.

Baca tentang async/await di sini.

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');
  }

1
AliF50 5 April 2021, 17:17