等到剩下的 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));

您想查看新的 awaitasync 方法。

看看这个:https://javascript.info/async-await

只是一些变化:

  • 使您的函数 processData return 成为承诺,只需在 return 关键字前添加:

    return rest.apiCall(  // ....
    
  • 使用 then 方法在该 return 值上链接对 f 的调用,而无需进一步调用 setTimeout:

    self.processData(transid).then(f)
    

就是这样。