我有这个功能:
isAuthenticated = (): boolean => {
xxx
};
我正在使用AngularJS,我想知道如何创建一个像
这样的函数keepCheckingAuthentication()
那将每隔60秒调用一次Authenticated()函数吗?
答案 0 :(得分:2)
有一个setInterval函数可以调用ms中给定时间间隔的任何代码:
var intervalID = setInterval(function() { console.log('Works!') }, 1000);
稍后您可以使用clearInterval(intervalID)
取消计时器。
答案 1 :(得分:2)
如果isAuthenticated
可以修改为实际发出请求调用服务器以检查身份验证,并且可以返回一个解析或拒绝的承诺,那么我会做
var keepCheckingAuthentication = function() {
return isAuthenticated().catch(angular.noop).then(function(isAuth) {
// Can do something different if isAuth == false
return $timeout(keepCheckingAuthentication, 60 * 1000);
});
});
请注意对catch
的通话。这有效地将任何拒绝转换为成功,因此在每种情况下都会运行下一个then
回调。
使用类似这样的东西而不是$setInterval
意味着来自服务器的响应之间总是有60秒,而不是请求。在较慢的连接或过载的服务器上,这意味着添加到重载连接或服务器的可能性较低,因为您确定先前的请求已完成,然后再发送另一个请求。
答案 2 :(得分:1)
你可以使用$interval
函数(AngularJS中window.setInterval()
的包装器)吗?
$interval
函数的文档为here
在您的情况下keepCheckingAuthentication()
是功能,您可以根据需要调整其他参数吗?这有帮助吗?
示例:
$interval(myFunctionAtInterval, 5000) // Scheduled for every 5 seconds, for instance
funtion myFunctionAtInterval() {...}
答案 3 :(得分:1)
我倾向于尽可能地避免setInterval
,即总是(保罗爱尔兰人在video中谈到这一点)。
我所做的是将setTimeout
包装在递归调用自身的函数中(条件允许我轻松停止,或让数据决定何时不再需要)。
var condition = true;
$scope.count = 1;
function myFunc(){
$scope.count += 1;
}
var timer = function(){
myFunc();
if( condition ){
$timeout(timer, 1000);
}
};
timer();
我在这里使用角度$timeout
,因为它总是被建议。
一个demo
答案 4 :(得分:1)
使用$ interval.this代码将帮助您:
var callefunc=function() {
console.log('hey i am calle');
}
$scope.caller=function(){
var stop = $interval(callefunc, 1000);
}
如果你想以1秒的间隔启动函数caller
,你可以调用callefunc
函数。