等到其余的api返回结果,然后再次调用api

时间:2018-01-21 20:06:33

标签: javascript reactjs settimeout axios

除了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));

2 个答案:

答案 0 :(得分:0)

只是一些变化:

  • 让您的函数processData返回承诺,只需添加return关键字前缀:

    return rest.apiCall(  // ....
    
  • 使用f方法将then方法的号码链接到该返回值,而无需再调用setTimeout

    self.processData(transid).then(f)
    

那就是它。

答案 1 :(得分:-1)

您希望查看新的等待异步方法。

检查出来:https://javascript.info/async-await