Tengo cuatro procesos asincrónicos que obtienen de diferentes fuentes, a saber, el proceso A, B, C y D.
Los procesos A, B y C son independientes entre sí, pero D depende de los datos de C.
En la medida de lo posible, quiero que A y B se obtengan de forma independiente en C y D, pero quiero conservar el resultado de A, B, C y D para el siguiente procedimiento.
Así que estoy tratando de encontrar la forma correcta de expresar esta funcionalidad.
Algo como
const results = await Promise.allSettled([A, B, C]); const resultD = await D(results[2].value);significa que estoy esperando para realizar D hasta que A, B, C hayan terminado, pero en este caso, A o B pueden tomar mucho más tiempo que C.
Igualmente,
const results = await Promise.allSettled([A, B, C, D(await C)]);¿No parece del todo correcto? No quiero que C se realice dos veces, y también quiero conservar el resultado.
¿Cuál sería la forma correcta de resolver esto con elegancia?
Puede agrupar C y D y resolverlo con A y B
Entendamos el fragmento a continuación:
Considere las funciones A , B , C y D equivalentes a la obtención de cuatro API diferentes. Además, observe cómo D necesita algunos datos, que obtendría de C .
Y en la función main estamos resolviendo A , B independientemente y estamos resolviendo D solo después de que C haya terminado.
const sleep = (delay, data) => new Promise(res => setTimeout(() => res(data), delay)); const A = () => sleep(100).then(() => "A") const B = () => sleep(200).then(() => "B") const C = () => sleep(100).then(() => "C") const D = (inp) => sleep(100).then(() => inp + "D") function main() { const promises = [A(), B(), C().then(res => D(res))]; Promise.all(promises).then(console.log); } main(); También puede usar Promise.allSettled pero asegúrese de comprender la diferencia entre allSettled y all .