Javascript 等待RESTAPI返回结果,然后再次调用api
除了Javascript 等待RESTAPI返回结果,然后再次调用api,javascript,reactjs,settimeout,axios,Javascript,Reactjs,Settimeout,Axios,除了setTimeout()之外,还有其他方法等待api调用后返回结果,然后在收到结果后立即再次调用该api吗 在我的例子中,我必须调用n次(取决于用户输入),api调用需要20-40秒的时间来处理并从后端返回结果。如果我发送另一个请求,而上一个请求仍在后台处理,那么它会中断后端 一旦收到并完全处理结果,调用api的正确方法是什么 sendRequest() { let self = this; function f() { if (self.st
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));
sendRequest(){
让自我=这个;
函数f(){
if(self.state.callPerSite{
如果(!firstCallIsProcessed){
firstCallIsProcessed=true;
}
callPerSite++;
这是我的国家({
结果数据:results.data,
胼胝石
});
}).catch(err=>this.onError(err));
您想看看新的wait和async方法
请查看以下内容:只是一些更改:
- 只需在
关键字前加前缀,即可使函数return
返回承诺:processData
return rest.apiCall( // ....
- 在返回值上使用
方法链接对then
的调用,而无需进一步调用f
:setTimeout
self.processData(transid).then(f)
就是这样。。我所说的“方法”实际上是指“方法”。我想我不必使用
setTimeout()
?确实,您不需要它。顺便说一句,rest.apiCall
是一个axios调用,当您说只需将return关键字放在rest.apiCall之前,您也可以将return
放在那里,但这是另一个原因:这将确定承诺的值。没有它,承诺的值对于您的cas来说是未定义的e这并不重要,因为您的主代码只是在承诺解决后查看状态。我所说的返回
是必需的,因为否则您的函数根本不会返回承诺(它不会返回任何内容),因此您将无法将然后
链接到它。请注意“承诺”之间的区别和“承诺值”。processData(transid){return;rest.apiCall({transactionId:transid},'json')
…}