用 Promise.all 替换循环的 http 调用

Replacing a looped http call with Promise.all

我正在尝试使用 Axios 替换发送 http 请求的循环。 http 是一个 Axios 对象,returns 是一个承诺。我想更改代码,以便使用 Promises.all() 而不是循环。我正在尝试创建一个 Promise,推入一个数组,然后传递给 Promises.all。我的承诺数组中只有空数组。

对于我做错的任何指示,我将不胜感激。

// 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 应该放在哪里……但这可能有效:

  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 */ } );

或使用地图:

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 */} );