返回几个api调用的1个数组

时间:2018-03-19 09:01:36

标签: javascript api

是否可以创建一个返回多个api调用结果数组的函数?

而不是:



var func1;
var func2;
var func3;

apicall1().then((res) => {
  func1 = res;
});

apicall1("string").then((res) => {
  func2 = res;
});

apicall1(int).then((res) => {
  func3 = res;
});




有这样的事情:



var result = [];

var Json = "{
	"functions": [{
		"name": "apicall1",
		"args": null
	}, {
		"name": "apicall2",
		"args": "string"
	}, {
		"name": "apicall2",
		"args": [0, "string"]
	}]
}";

MyFunction(Json) {
  for (i = 0; i < functions.lenght; i += 1) {
    functions[i].name(functions[i].args).then((res) => { result.push(res); });
  }
  return result;
}
&#13;
&#13;
&#13;

我搜索一些东西,以避免X卡拉皮一个接一个。

谢谢; D

3 个答案:

答案 0 :(得分:0)

您可以使用Promise.all获取数组中的结果:

Promise.all([apicall1(), apicall1("string"), apicall1(int)])
  .then(results => {
    // Destructure the results into separate variables
    let [func1, func2, func3] = results;

    //access the results here
  });

答案 1 :(得分:0)

你应该使用

Promise.all([ api1,api2,api2,...]).then(function(results){
}).catch(function(err){
})

result将是一个包含各索引中所有响应的数组。这里需要处理的一件事是异常。如果在任何类型的异常中发生任何API调用,它将会捕获。

答案 2 :(得分:0)

如果您想一个接一个地触发呼叫,可以使用async/await

https://hackernoon.com/6-reasons-why-javascripts-async-await-blows-promises-away-tutorial-c7ec10518dd9

let result = [];

let funcs = [{
        "name": "apicall1",
        "args": null
    }, {
        "name": "apicall2",
        "args": "string"
    }, {
        "name": "apicall2",
        "args": [0, "string"]
    }]

async makeCalls() {
  for (let func of funcs) {
    let res = await func.name(func.args)
    result.push(res)
  }
  return result;
}

makeCalls()