在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构建管理后台

用于定期后台任务的警报管理器的替代方案

在 AngularJS 中从没有隔离范围的指令调用控制器函数

PhoneGap - Angularjs http 服务(PHP API 调用)不工作

在 iOS 中定期在后台线程中运行任务