Как вернуть накопленные результаты нескольких (параллельных) вызовов асинхронных функций в цикле?

У меня есть функция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 и т. Д. Я надеюсь здесь на некоторые общие методы, которые не зависят от конкретной библиотеки.

Ответы на вопрос(4)

Ваш ответ на вопрос