¿Cómo devuelvo los resultados acumulados de múltiples llamadas de función asincrónicas (paralelas) en un bucle?
Tengo una funcionfoo
que realiza múltiples llamadas (paralelas) asíncronas en un bucle. Necesito esperar de alguna manera hasta que los resultados de todas las llamadas estén disponibles. ¿Cómo puedo devolver los resultados completos defoo
o desencadenar algún procesamiento después detodas de los datos está disponible?
Intenté agregar cada resultado a una matriz, pero luego la matriz no se completa hasta después del punto donde necesito usarla.
function foo() {
var results = [];
for (var i = 0; i < 10; i++) {
someAsyncFunction({someParam:i}, function callback(data) {
results.push(data);
});
}
return results;
}
var result = foo(); // It always ends up being an empty array at this point.
Nota: esta pregunta es deliberadamente genérica a lo largo de las líneas del genérico existente"¿Cómo devuelvo la respuesta de una llamada asincrónica?" pregunta. Esa pregunta tiene algunas respuestas excelentes, pero no cubre múltiples llamadas asíncronas. Hay algunas otras preguntas que mencionan varias llamadas, pero no pude encontrar ninguna basada en bucles, y algunas solo tenían respuestas de jQuery, etc. Espero aquí algunas técnicas genéricas que no dependen de una biblioteca en particular.