等到剩下的 api returns 结果再调用 api
Wait until the rest api returns result and then call api again
除了setTimeout()
还有其他方法可以在api调用后等待结果返回,然后在收到结果后立即再次调用api吗?
在我的例子中,我必须调用 n
次(取决于用户输入)并且 api 调用需要 20-40 秒来处理并且 return 结果来自后端。如果我发送另一个请求,而前一个请求仍在后台处理,那么它会破坏后端。
收到并完全处理结果后调用 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));
您想查看新的 await 和 async 方法。
只是一些变化:
使您的函数 processData
return 成为承诺,只需在 return
关键字前添加:
return rest.apiCall( // ....
使用 then
方法在该 return 值上链接对 f
的调用,而无需进一步调用 setTimeout
:
self.processData(transid).then(f)
就是这样。
除了setTimeout()
还有其他方法可以在api调用后等待结果返回,然后在收到结果后立即再次调用api吗?
在我的例子中,我必须调用 n
次(取决于用户输入)并且 api 调用需要 20-40 秒来处理并且 return 结果来自后端。如果我发送另一个请求,而前一个请求仍在后台处理,那么它会破坏后端。
收到并完全处理结果后调用 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));
您想查看新的 await 和 async 方法。
只是一些变化:
使您的函数
processData
return 成为承诺,只需在return
关键字前添加:return rest.apiCall( // ....
使用
then
方法在该 return 值上链接对f
的调用,而无需进一步调用setTimeout
:self.processData(transid).then(f)
就是这样。