是否可以创建一个返回多个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;
我搜索一些东西,以避免X卡拉皮一个接一个。
谢谢; D
答案 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
:
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()