Javascript 使用`setInterval()`的HTTP轮询每1秒调用一次,而不是上述间隔
我在我的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;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
}, 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秒?