Замена зацикленного HTTP-вызова на Promise.all - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь заменить l oop, который отправляет HTTP-запросы, используя Ax ios. http является объектом Ax ios и возвращает обещание. Я хочу изменить код, чтобы использовать Promises.all () вместо al oop. Я пытаюсь создать Promise, pu sh в массиве, а затем перейти к 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);

1 Ответ

0 голосов
/ 10 июля 2020

Не совсем уверен, требуется ли 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 */ } );

или использовать карту:

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