Tengo una matriz de objetos que tiene 3 elementos dentro. Estoy iterando sobre él y durante cada ciclo necesito hacer 3 llamadas API que dependen de la respuesta de cada uno. Entonces, en total, debe haber 9 solicitudes de API completadas.
const arrayOfObjects = [ { first: 'thing', second: 'thing', third: 'thing' }, { fourth: 'thing', fifth: 'thing', sixth: 'thing' }, { seventh: 'thing', eight: 'thing', ninth: 'thing' }, ] const makeModuleAndBatteryPromises = () => { arrayOfObjects.map((obj) => { createModules(obj.first).then((response) => { createBattery(response, obj.second).then(res => { assignAssets(res, obj.third).then(res => 'assignment done!'); }); }); }); } makeModuleAndBatteryPromises(); Entonces, mirando el código anterior, parece que realmente solo tengo control sobre las primeras 3 llamadas API en el primer bucle de arrayOfObjects. Como tengo assignAssets(res).then(res => 'assignment done!'); lo que me permitirá realizar alguna operación como actualizar la página o redirigir una vez que la tercera promesa se resuelva en el primer bucle.
Sin embargo, necesito hacer alguna operación en la novena/última promesa. Esto es lo que intenté para que fuera asíncrono.
const makeModuleAndBatteryPromises = async () => { const promises = arrayOfObjects.map(async obj => { const firstResponse = await createModules(obj.first); const secondResponse = await createModules(firstResponse, obj.second); await assignAssets(secondResponse); }); await Promise.all(promises) .then(res => //do some action after all 9 promises resolved) } makeModuleAndBatteryPromises()No estoy logrando lo que esperaba, ¿alguien puede decirme lo que me estoy perdiendo?
si entiendo correctamente, ¿quiere el valor resuelto de los activos asignados finales?
Posiblemente te hayas confundido con una combinación de async / await y .then
const makeModuleAndBatteryPromises = async() => { const promises = arrayOfObjects.map(async obj => { const firstResponse = await createModules(obj.first); const secondResponse = await createModules(firstResponse, obj.second); return assignAssets(secondResponse); }); const res = await Promise.all(promises); const finalValue = res.at(-1); // or res[res.length-1]; // do things with finalValue } makeModuleAndBatteryPromises()