Я знаю, что могу использовать Promise.all()
, но он выдает массив в качестве вывода
True, но вам не нужно использовать результат, который он предоставляет.Вы можете использовать побочные эффекты так же, как и в своем псевдокоде.
Если все ваши различные вызовы $.getJSON
написаны по отдельности, это пример использования для jQuery $.when
:
var result = {}; // final object containing consolidated result
$.when(
$.getJSON(restapi1, function (data) {
result["a"] = data.total;
}),
// next rest call to fetch b
$.getJSON(restapi2, function (data) {
result["b"] = data.total;
}),
// ...
).done(function() {
// use `result`
});
Если вместо этого у вас есть цикл, использование $.when
возможно, но неудобно:
var result = {}; // final object containing consolidated result
var promises = [];
for (/*...*/) {
promise.push($.getJSON(/*...*/));
}
$.when.apply($, promises).done(function() {
// use `result`
});
... поэтому в этой ситуации Promise.all
, вероятно, лучше, если вы предполагаете, что он присутствует в среде (изначально)или потому что вы заполняете его или используете расширенную библиотеку обещаний):
var result = {}; // final object containing consolidated result
var promises = [];
for (/*...*/) {
promise.push($.getJSON(/*...*/));
}
Promise.all(promises).done(function() {
// use `result`
});