2016-02-29 82 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

相關問題