在angularjs的后台定期调用服务器上的函数
Posted
技术标签:
【中文标题】在angularjs的后台定期调用服务器上的函数【英文标题】:Call a function periodically on server in background in angularjs 【发布时间】:2016-01-05 14:51:33 【问题描述】:我在 q 服务器上有一个如下所示的 API:
function isLoggedIn()
....
此 API 判断用户是否已登录。
我想每 15 分钟或在任何时间间隔内调用此 API,以检查用户是否在我的 Angular 应用上通过了身份验证。
我关心的是如何间隔调用一个API,以及在哪里写这个方法。
【问题讨论】:
简单的服务。可以在运行块中启动它 虽然这完全取决于您的规范/要求/设计,但我建议您在触发任何 API 调用时检查登录状态,这样客户端就不会多次访问服务器他一夜之间打开浏览器。 【参考方案1】:在你的主控制器中使用 setInterval。
setInterval(function()
// call your service method here
//isLoggedIn(); in your case
, 3000); // This is time period in milliseconds 1000 ms = 1 second.
或者
使用 $interval 服务被注入到你的控制器函数中,你可以使用它来安排重复的函数调用。下面是一个使用 $interval 服务来安排每 5 秒调用一次函数的示例:
var myapp = angular.module("myapp", []);
myapp.controller("MyController", function($scope, $interval)
$interval(isLoggedIn, 5000);
);
function isLoggedIn()
console.log("Interval occurred");
// call your service method here
【讨论】:
最好使用Angular的$inteval
服务,并在run
方法中设置
非常感谢。 @KashifMustafa
@NaushadAhmad:欢迎,如果你有答案,请标记:)【参考方案2】:
这是我使用的代码。
app.run(
function ( $interval, AuthService, $state, $rootScope, $http, $location, $stateParams )
$interval( function( event, toState, toParams, fromState, fromParams )
AuthService.keepAlive( $rootScope, $http ).then( function( data )
if( data.Result == "false" )
AuthService.logout( $http, $rootScope ).then( function( data )
$rootScope.returnToState = $location.url();
//$rootScope.returnToStateParams = toParams.Id;
$state.transitionTo("login.signin");
//event.preventDefault();
);
);
, 1000 * 60 );
);
它的工作。我可以ping服务器分钟。我得到了正确的回应。 当我从 event.preventDefault 中删除评论时的小问题我得到的事件未定义。
如果可以的话,请告诉我。
【讨论】:
首先检查你的事件是否为空,可能是它的空导致异常。以上是关于在angularjs的后台定期调用服务器上的函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 Jasmine 在 AngularJS 中测试去抖函数从不调用该函数
在 AngularJS 中从没有隔离范围的指令调用控制器函数