Как вернуть накопленные результаты нескольких (параллельных) вызовов асинхронных функций в цикле?
У меня есть функцияfoo
который делает несколько (параллельных) асинхронных вызовов в цикле. Мне нужно как-то дождаться, когда станут доступны результаты всех звонков. Как я могу вернуть полные результаты изfoo
или иным образом вызвать некоторую обработку послевсе данных есть в наличии?
Я попытался добавить каждый результат в массив, но затем массив не заполняется до того момента, когда мне нужно его использовать.
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.
Примечание: этот вопрос является преднамеренно общим в соответствии с существующим общим«Как мне вернуть ответ от асинхронного вызова?» вопрос, На этот вопрос есть несколько отличных ответов, но он не охватывает несколько асинхронных вызовов. Есть некоторые другие вопросы, в которых упоминаются множественные вызовы, но я не смог найти какие-либо основанные на циклах, и у некоторых были только ответы jQuery и т. Д. Я надеюсь здесь на некоторые общие методы, которые не зависят от конкретной библиотеки.