除了setTimeout()
之外还有其他方法等待结果在api调用后返回,然后在收到结果后立即再次调用api吗?
在我的情况下,我必须调用n
次(取决于用户输入)并且api调用需要20-40秒来处理并从后端返回结果。如果我发送另一个请求,而前一个请求仍在后台处理,那么它会破坏后端。
收到并完全处理结果后,调用api的正确方法是什么?
sendRequest() {
let self = this;
function f() {
if (self.state.callPerSite < self.state.selectedSites.length) {
self.processData(transid);
setTimeout(f, 20)
}
} else {
self.setState({progress: 100});
}
}
f();
}
processData(transid) {
rest.apiCall({transactionId: transid}, 'json').then(results => {
if (!firstCallIsProcessed) {
firstCallIsProcessed = true;
}
callPerSite++;
this.setState({
resultsData: results.data,
callPerSite: callPerSite
});
}).catch(err => this.onError(err));
答案 0 :(得分:0)
只是一些变化:
让您的函数processData
返回承诺,只需添加return
关键字前缀:
return rest.apiCall( // ....
使用f
方法将then
方法的号码链接到该返回值,而无需再调用setTimeout
:
self.processData(transid).then(f)
那就是它。
答案 1 :(得分:-1)
您希望查看新的等待和异步方法。