Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用`setInterval()`的HTTP轮询每1秒调用一次,而不是上述间隔_Javascript_Angular_Setinterval - Fatal编程技术网

Javascript 使用`setInterval()`的HTTP轮询每1秒调用一次,而不是上述间隔

Javascript 使用`setInterval()`的HTTP轮询每1秒调用一次,而不是上述间隔,javascript,angular,setinterval,Javascript,Angular,Setinterval,我在我的Ionic 4应用程序中有一个要求,我需要每20秒进行一次API调用。当我使用setInterval时,API每1秒命中一次,而不是20秒。这是我的密码,我能知道出了什么问题吗 我的.ts文件 getApiData{ 这是http.get'https://kairavforex.com/api/libor_rate/“,{},{'Content-Type':'application/json','Authorization':Token++this.authToken} .thendat

我在我的Ionic 4应用程序中有一个要求,我需要每20秒进行一次API调用。当我使用setInterval时,API每1秒命中一次,而不是20秒。这是我的密码,我能知道出了什么问题吗

我的.ts文件

getApiData{ 这是http.get'https://kairavforex.com/api/libor_rate/“,{},{'Content-Type':'application/json','Authorization':Token++this.authToken} .thendata=>{ this.getData=JSON.parsedata.data.results; } 这是重复间隔; } 重复间隔{ this.rateTimer=setInterval=>{ 这是getApiData; }, 20000; } 首先,像这样试试

var速率定时器; rateTimer=setInterval=>{ console.logHello;
}, 5000; 在repeatInterval中调用getApiData并将repeatInterval设为iLife

getApiData(){
    this.http.get('https://kairavforex.com/api/libor_rate/',{},{'Content-Type': 'application/json','Authorization': "Token" + " " +  this.authToken})
      .then(data=>{
       this.getData=JSON.parse(data.data).results;      
      })
  }

(repeatInterval(){
     this.rateTimer=setInterval(() => { 
       this.getApiData(); 
    }, 20000);   
  })();
与依赖setInterval或setTimeout函数不同,您可以尝试使用RxJS,或者根据您的需求操作符连续轮询端点。试试下面的方法

一些服务

停止学习$=新科目; getApiData:可观察的{ 返回this.http.get 'https://kairavforex.com/api/libor_rate/', {}, {'Content-Type':'application/json','Authorization':Token++this.authToken} 管 tapdata=>this.getData=JSON.parsedata.data.results,
delay20000,//我解决了这个问题,在开始新的间隔之前清除了SetInterval,以避免间隔重复

getApiData(){
    this.http.get('https://kairavforex.com/api/libor_rate/',{},{'Content-Type': 'application/json','Authorization': "Token" + " " +  this.authToken})
      .then(data=>{
       this.getData=JSON.parse(data.data).results;      
      })
      this.repeatInterval();
  }

  
  repeatInterval(){
    clearInterval(this.rateTimer);
    this.rateTimer=setInterval(() => { 
      this.getApiData(); 
   }, 20000); 
  }

使用此设置,您肯定不需要setInterval,但SetTimeoute每次调用repeatInterval时,它都会创建另一个间隔,因此20秒后您将有2个间隔,然后是4个,然后是8个,依此类推repeatInterval=>{clearTimeoutthis.rateTimer;this.rateTimer=setTimeoutthis.getApiData,20000;}万一它在别处被调用——我也使用StudiTimeUnad的InTalAvE,你也应该考虑,你希望下一个API调用在上次完成或启动后20秒发生吗?例如:如果API调用需要5s来返回响应,那么下一个调用会发生在15秒还是20秒?