await Promise.all( endpoints.map((endpoint) => this.httpService.get(endpoint).pipe( map((response) => { return response.data['result']; }), ), ), ).then( axios.spread((...allData) => { allData.forEach((res) => res.subscribe((res) => { apiFeedBack.push(res); console.log(apiFeedBack); }), ); }), );Durante la depuración, se salta la ejecución de promise.all y devuelve directamente undefined como respuesta. Que me estoy perdiendo aqui
Debe devolver la matriz de promesas recibidas de la función de mapa como se muestra a continuación:
await Promise.all( return endpoints.map((endpoint) => this.httpService.get(endpoint).pipe( map((response) => { return response.data['result']; }), ), ), ).then( axios.spread((...allData) => { allData.forEach((res) => res.subscribe((res) => { apiFeedBack.push(res); console.log(apiFeedBack); }), ); }), )En primer lugar, cuando esté usando await, no use then . Así es como sería:
const promiseAll = async () => { try { const res = await Promise.all(promises); return res; } catch (e) { console.error(e); } }Ahora, necesitamos obtener los valores de las promesas usando await. Además, estaría limpio si lo escribieras de esta manera:
const endpoints_Promises = endPoints.map(endPoint => { return new Promise((resolve, reject) => { this.httpService.get(endpoint).pipe( map((response) => { resolve(response.data['result']); }) ) }) }) try { const responses = await Promise.all(endpoints_Promises); responses.forEach(data => console.log(data)); } catch (e) { console.error(`Error occured: ${e}`); }amigos, como sabrán, @nestjs/axios en NestJS devuelve observables en lugar de promesas, sin embargo, este no es el caso de axios .
Entonces, en caso de que necesite hacer observable asíncrono, deberá convertirlo en promesa, aunque no es una forma recomendada y .toPromise() está obsoleto en la última versión de @nestjs/axios .
Promise.all( return endpoints.map((endpoint) => this.httpService.get(endpoint).toPromise(), ), ).then((responses)=> { // here you get the resolved promises responses array }) Consulte esto para obtener más información sobre el cumplimiento de Promise.all .
Consulte esto para obtener más información si debe usar observable async/await ¿Es una buena práctica usar Observable con async/await?