javascript - 来自一系列 getJSON() 调用的合并结果对象

标签 javascript jquery promise getjson

我使用jquery已经很长时间了。 我有一个要求,需要调用一些 Rest API 以从每个 API 中获取一些数据。然后根据所有调用的结果创建一个合并的结果对象。

类似这样的事情:

我正在寻找的输出:

result {
    a: 123,
    b: 456, ....
    z: 789
}

伪:

var result = {}; // final object containing consolidated result
$.getJSON(restapi1, function (data) {
    result["a"] = data.total;
});

// next rest call to fetch b
$.getJSON(restapi2, function (data) {
    result["b"] = data.total;
});

// so on...
// after fetching all values and storing them in one result object access elements like
var value1 = result.a;

我知道我可以使用Promise.all(),但它提供了一个数组作为输出,并且我想避免循环遍历它来获取所需的元素。

请提出建议。 谢谢。

最佳答案

I know I can use Promise.all(), but it gives an array as output

确实如此,但您不必使用它提供的结果。您可以像在伪代码中那样使用副作用。

如果您的各种 $.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 可能会更好,前提是您可以假设它存在于环境中( native ,或者因为您填充它或使用增强的 Promise 库):

var result = {}; // final object containing consolidated result
var promises = [];
for (/*...*/) {
    promise.push($.getJSON(/*...*/));
}
Promise.all(promises).done(function() {
    // use `result`
});

关于javascript - 来自一系列 getJSON() 调用的合并结果对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50407363/

相关文章:

javascript - 使用javascript动态创建表

php - JQuery.getJson 未正确触发

javascript - 只有第一页在 phonegap 中加载 javascript

node.js - ES7 - 如何用 await 替换 Promise?

javascript - JS : async function implicitly unwraps promise?

javascript - HTML 小写或大写的 <script> 标签

javascript - 使用 onchange 函数获取复选框值

javascript - 低于一定宽度时 float 的 div 与未 float 的 div 重叠

javascript - 如何抓取即将上传的多个文件的名称?

javascript - 在表达式中找到 promise 。 Angular 表达式中 promise 的自动展开已被弃用