2016-02-29 62 views
0

我正在尝试编写一个模拟轮询功能的服务。我的代码如下:创建一个服务来重复控制器中的功能

app.service('poller', ['$timeout', 

    function($timeout) { 

     return ({ 
      poll 
     }) 

     function poll(e) { 
      $timeout(function() { 
       poll(e); 
      }, 5000); 
     } 
    } 
]); 

当我在我的控制器注入它我尝试使用这样的:

poller.poll($scope.getNewMessages()); 

奇怪的是,这只是调用一次。此外,当我尝试使用控制台登录服务,如console.log(e)我得到未定义。我究竟做错了什么?

+0

@charlietfl它ES6有效的语法。这是'({poll:poll})的快捷方式' – jcubic

回答

1

您需要通过功能价值的轮询功能,你需要调用的函数:

app.service('poller', ['$timeout', function($timeout) { 

     return ({ 
      poll 
     }); 

     function poll(e) { 
      e(); 
      $timeout(function() { 
       poll(e); 
      }, 5000); 
     } 
    } 
]); 

poller.poll($scope.getNewMessages); 
+0

感谢您的回答。我可能问为什么我应该在没有括号的情况下调用轮询器内的函数? 'poller.poll($ scope.getNewMessages)' –

+1

你将函数传递给了轮询器,它变成了'e'参数,你可以在轮询器中调用它。如果添加括号,它将在轮询之前调用,结果将作为“e”参数传递。 – jcubic

相关问题