Estoy usando AWS amplificar para hacer llamadas a la API y tengo 5 llamadas asíncronas a la API que necesito hacer. ¿Cómo puedo hacer estas llamadas de manera eficiente y esperar a que se completen todas y luego comenzar el proceso de trabajo con los datos que obtuve como resultado de estas llamadas?
Bueno, en realidad me enteré, así que aquí está...
load1 = async () => { return API.get('myApi', '/myapi1', {}) } load2 = async () => { return API.get('myApi', '/myapi2', {}) } verifyTasksExecution = async () => { Promise.all([this.load1(),this.load2()]).then((values) => { console.log('VALUES:', values); }); }para esperar varias promesas y esperar a que se resuelvan todas, puede usar Promise.all que acepta una serie de promesas y devuelve una serie de datos resueltos
puedes leer más sobre esto en MDN , el siguiente ejemplo es de MDN
// this will be counted as if the iterable passed is empty, so it gets fulfilled var p = Promise.all([1,2,3]); // this will be counted as if the iterable passed contains only the resolved promise with value "444", so it gets fulfilled var p2 = Promise.all([1,2,3, Promise.resolve(444)]); // this will be counted as if the iterable passed contains only the rejected promise with value "555", so it gets rejected var p3 = Promise.all([1,2,3, Promise.reject(555)]); // using setTimeout we can execute code after the stack is empty setTimeout(function() { console.log(p); console.log(p2); console.log(p3); }); // logs // Promise { <state>: "fulfilled", <value>: Array[3] } // Promise { <state>: "fulfilled", <value>: Array[4] } // Promise { <state>: "rejected", <reason>: 555 }Puede usar promise.all para realizar todas las solicitudes de forma asíncrona. Ver esta pregunta para más detalles
Tenga en cuenta también que si alguna de las solicitudes falla, entonces promise.all se rechaza.