簡體   English   中英

用 Promise.all 替換循環的 http 調用

[英]Replacing a looped http call with Promise.all

我正在嘗試使用 Axios 替換發送 http 請求的循環。 http 是 Axios object 並返回 promise。 我想更改代碼以便使用 Promises.all() 而不是循環。 我正在嘗試創建一個 Promise,推入一個數組,然后傳遞給 Promises.all。 我的 promises 數組中只有空的 arrays 。

我將不勝感激任何關於我做錯了什么的指示。

// Converting this 
responseData = [];
for (const record of response.records) {
    let response = await http.get('/records/' + record.id);
    responseData.push(response.data.data);
}




    // I am trying to convert to this ..
      let promises = [];
      for (const record of response.data.data) {
          let promise = new Promise((resolve, reject) => {
             let response = http.get('/records/' + record.id)
                     .then(response => {
                       return response.json();
                     })
                     .then(resp => {
                       // console.log(resp.data.data);
                         //return resp.data.data
                         resolve(resp.data.data);
                     });
    
             return response;
    
          });
          promises.push(promise);
      }
    
      Promise.all(promises).then(records);

不完全確定是否需要 response.json(),以及 .records 和 .data.data 應該在哪里 go ......但這可能有效:

  const promises = [];
  for (const record of response.records) {
      promises.push(
          http.get('/records/' + record.id)
              .then(response => response.json())    //maybe?
              .then(response => response.data.data)
      )
  }
  Promise.all(promises).then(records => { /* do something */ } );

或使用 map:

const promises = response.records.map(record => 
     http.get('/records/' + record.id)
         .then(response => response.json())    //maybe?
         .then(response => response.data.data)
)
Promise.all(promises).then(responseData => {/* do something */} );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM