首页 > 解决方案 > 不使用 settimeout 触发多个 api

问题描述

我每 4 秒调用一次 dataUpdate 函数,直到记录长度为 0。

在数据内部更新 this.callAPI(); 是触发api调用。

我将手动超时设置为 4 秒以调用 callapi 的函数。

而不是超时,如何在上一个 api 完成后立即调用 api。

 dataUpdate =()=> { 
     var arrayList = this.arrayList; 
     if(arrayList.length > 0)
     { 
         var inputData = {
             ...inputData,
             data:{
                 ...inputData.data,first:'',second:'' 
             }
          }; 
            var first = arrayList[0].first;
            var second = arrayList[0].second; 
            inputData.data.first = first;
            inputData.data.second = second;  
            this.setState({ inputData:inputData });  
            this.callAPI(); 
            arrayList.shift();
            this.arrayList = arrayList; 
            
                if(arrayList.length !== 0){  
                    setTimeout(() => { 
                         this.dataUpdate();
                    }, 4000); 
                } 
                
                if(arrayList.length === 0){   
                    setTimeout(() => {  
                        this.props.callMessage(this.totalCount);
                    }, 1000);    
                }
                 
       } 
  }

标签: javascriptreactjs

解决方案


你的问题在于有状态。使 callapi 函数无状态并传递所有需要的参数,以便您可以多次调用它,而不依赖于先前的调用或状态


推荐阅读