我可以在服务中放置$ interval调用吗?

时间:2015-03-29 09:08:53

标签: angularjs

我编码了这个:

 $interval(us.isAuthenticated(), 5 * 1000);

auth服务已注入us服务。

代码只调用isAuthenticated一次,然后不再调用它。有没有办法解决这个问题,还是我不能以这种方式使用$ interval?如果我在控制器中调用$ interval来怎么样?我已经尝试过使用app.run调用的函数,但是它不能同时工作

2 个答案:

答案 0 :(得分:2)

您的代码等同于以下内容:

var v = us.isAuthenticated();
$interval(v, 5 * 1000);

因此,假设us.isAuthenticated()返回一个布尔值,您将此布尔值传递给$interval。这不是$interval所期望的。它期望一个函数重复调用。所以代码应该是

$interval(us.isAuthenticated, 5 * 1000);

$interval(function() {
              us.isAuthenticated();
          }, 5 * 1000);

var functionToRepeat = function() {
    us.isAuthenticated();
};
$interval(functionToRepeat, 5 * 1000);

因此,简而言之,您必须传递一个函数,而不是传递函数返回的值。

答案 1 :(得分:1)

你应该从函数调用中调用interval函数或者你可以传递引用,除了@JB Nizet的回答你还应该考虑下面的模式来调用$interval,如下invokeApply是其中一个参数通过使用你可以关闭该参数的脏检查。

<强>代码

$interval(function() {
        us.isAuthenticated();
    },
    5 * 1000, //delay,
    100, //[count] it accepts number, 
    true, //[invokeApply]
    { param: 1} //any [Pass]
);