Преобразование цикла запросов Axios post в promise

#javascript #reactjs #post #axios

#javascript #reactjs #Публикация #axios

Вопрос:

У меня есть цикл запросов axios:

 for(const [number, response] of Object.entries(questions)){
  axios.post(
    this.address 'surveypost',
     {"patientID": patientID,
              "questionID": number,
                "likertResponse": response,
                  "surveyNumber": surveyID, "admin": this.admin, "masterpassword": this.masterpassword},
    { headers: {'Content-Type': 'application/json'} }
  )
    .then(e =>{console.log(e);
    console.log("inserted")})
    .catch(error =>{console.log(error)})
}
  

и мне нужно превратить их в одно обещание axios. Как бы мне поступить, чтобы я мог вернуть обещание, которое гарантирует, что все выполнено?

мой желаемый результат return promise(...) или что-то подобное, поскольку есть вещи, которые я должен выполнить, выполните последующие действия, подобные этому, в:

var chain = Promise.resolve()
.then(promise) // LOOPED AXIOS POST REQUEST ABOVE
.then(another_promise) // subsequent actions;

Комментарии:

1. используйте Promise.all

Ответ №1:

Вы можете поместить каждое обещание в массив и вызвать Promise.all

 let promsArr = [];
for(const [number, response] of Object.entries(questions)){
  promsArr.push(axios.post(
    this.address 'surveypost',
     {"patientID": patientID,
              "questionID": number,
                "likertResponse": response,
                  "surveyNumber": surveyID, "admin": this.admin, "masterpassword": this.masterpassword},
    { headers: {'Content-Type': 'application/json'} }
  ))
}

Promise.all(promsArr)
.then(resp => {
  console.log("data", resp);
})
.catch(err => {console.log(err)})