我需要每x秒间隔(3000毫秒)进行一次休息调用,以查询网络服务的状态,直到我得到想要的结果或直到12次(例如)或我收到预期的状态:
function myFunction() {
var i=0;
var _onSuccess = function(response) {
if (response.status=== 'READY' || i >= 12) {
clearInterval(x);
if(response.status !== 'READY') {
$location.path('/errorView');
}
}
}
var x = setInterval(function () {
$rest.getSomething(_onSuccess)
}, 3000);
}
我有另一个函数调用myFunction超时,因为如果我在32秒后没有收到预期结果,我想取消停止休息调用并转到错误视图。
function myFunction2() {
myFunction();
$timeout(function () {
$location.path('/routeWhenStatusReady');
}, 32000);
}
有没有办法改善这个?我想完成超时myFunction2,如果Ready状态在16秒内正常,例如不等待32秒......
谢谢!
答案 0 :(得分:0)
您可以在变量中设置$ timeout:
var myTimeout = $timeout
并完成:
$timeout.cancel(myTimeout);
答案 1 :(得分:0)
将$timeout
计时器存储在全局范围内,myFunction
可以访问该范围。并在达到所需结果时取消计时器。
var timer=null;
function myFunction(){
var i=0;
var _onSuccess = function(response){
if (response.status=== 'READY' || i >= 12) {
clearInterval(x);
if(timer){
$timeout.cancel(timer);
}
if(response.status !== 'READY'){
$location.path('/errorView');
}
}
}
var x = setInterval(function () {
$rest.getSomething(_onSuccess)
}, 3000);
}
function myFunction2(){
myFunction();
timer = $timeout(function () {
$location.path('/routeWhenStatusReady');
}, 32000);
}
答案 2 :(得分:0)
第1步:
将$ interval分配给变量
var timeHandler = $interval(() => {
// your code
}, 1000) };
第2步:
并在间隔取消功能
中传递变量时取消它
$interval.cancel(timeHandler);
参考:here