Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从一系列getJSON()调用中合并结果对象_Javascript_Jquery_Promise_Getjson - Fatal编程技术网

Javascript 从一系列getJSON()调用中合并结果对象

Javascript 从一系列getJSON()调用中合并结果对象,javascript,jquery,promise,getjson,Javascript,Jquery,Promise,Getjson,很长一段时间后,我正在使用jquery。 我有一个需求,我需要调用几个RESTAPI来从每个API获取一些数据。然后从所有调用的结果中创建一个合并的结果对象 大概是这样的: 我正在寻找的输出: result { a: 123, b: 456, .... z: 789 } var result = {}; // final object containing consolidated result $.getJSON(restapi1, function (data) {

很长一段时间后,我正在使用
jquery
。 我有一个需求,我需要调用几个RESTAPI来从每个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;
伪:

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()
,但它提供了一个数组作为输出&我希望避免在它上面循环以获取所需的元素

请建议。 多谢各位

我知道我可以使用
Promise.all()
,但它会给出一个数组作为输出

是的,但您不必使用它提供的结果。您可以像在伪代码中一样使用副作用

如果您的各种
$.getJSON
调用都是单独编写的,那么这就是jQuery的
$的一个用例

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`
});
如果您有一个循环,请使用
$。如果可以使用
但不方便:

var result = {}; // final object containing consolidated result
var promises = [];
for (/*...*/) {
    promise.push($.getJSON(/*...*/));
}
$.when.apply($, promises).done(function() {
    // use `result`
});
…因此在这种情况下,
Promise.all
可能更好,前提是您可以假设它存在于环境中(本机,或者因为您多填充它或使用增强的Promise库):


我的做法大致如下:

// a wrapper for the basic retrieval functionality
async function getTotal( param ) {
  const res = await $.getJSON( param.url );
  return { name: param.name, total: res.total };
}

async function getData() {
  // start all requests
  // api list contains entries like { name: 'a', url: restapi1 }
  const reqs = apilist.map( url => getTotal )

  // wait for all requests to finish
  const resp = await Promise.all( reqs );

  // convert to the output format
  return resp.reduce( (el,all) => { all[el.name] = el.total; return all; }, {} );
}

getData().then( (result) => /* ... */ );

各种
$.getJSON
调用是单独编写的,还是有一个循环?@T.J.Crowder Individual calls.Fanatastic!!谢谢