0

我需要每3秒以角度1.3輪詢API。我需要運行的方法是:使用Angular 1.3中的工廠或服務反覆輪詢API

$scope.getCurrentConversation = function(){ 
CommonServices.getAllConversations($scope.api_key) 
    .then(function(_data) { 
    $scope.conversations = _data.data; 
    }); 
} 

以下消息在CommonServices.getCurrentConversation中定義。如果這看起來很奇怪,我會這樣做來整合用於多個控制器的「公共服務」。它只是返回一個承諾,更新$ scope變量以重新填充顯示數據的DOM vi ng-repeat。

getCurrentConversation: function(api_key, conversation_id){ 
    return $http({ 
     url: '/api/v1/conversations/' + conversation_id, 
     method: "GET", 
     headers: { 'X-API-TOKEN': api_key }, 
     data: '' 
    }) 
    } 

這些功能工作正常,但我需要調用的第一個每3秒,我不確定某個工廠或服務是否會比建立某種形式的計時器循環在主動控制一個更好的方法並按原樣發射。任何建議將不勝感激。

謝謝!

更新:我意識到輪詢不是一個最佳的解決方案,websockets等可能是一個更好的方式去,但我還沒有與他們嘗試過,我不知道如何強大的連接將爲移動客戶端等任何關於整體方法的信息,鏈接等也將被讚賞。

+3

我現在不是這個問題的目的,但每2-3s請求一次Webservice可能不是一個可行的解決方案。您可能需要重新考慮您的數據檢索邏輯策略。 您可能會看到SocketIO允許在服務器和客戶端之間啓動會話,然後在修改服務器時,您可以通知客戶端觸發Get。 關於你的文件的體系結構,我想你可能會看看模式:** API網關**。它可以幫助您在現有的實現中進行搜索。 而對於你的問題,服務會更好。 – SamiX

+1

我希望你不想把「每3秒」的部分放入服務或工廠。它感覺*實現*特定(與本服務交談的每件事物是否都需要每3秒處理一次新數據的相同負擔?)我期望'$ timeout($ scope.getCurrentConversation,3000);'最後的控制器就足夠了。雖然其他人可能會不同意... – DRobinson

回答

0

您將會看到一家工廠的唯一真正優勢是您可以撥打new來創建多個工廠。我不知道你是否希望每3秒鐘都有多個工廠進行輪詢,但如果你不這樣做,那麼實際上並沒有什麼區別。

使用服務可能會更好,因爲在開始時它會更簡單一些。

編輯

我也同意DRobinson高於工廠/服務可能不是最好的地方爲$interval因爲即使當你在另一個控制器是它會活下去,等等,所以它根據需要可能會很好地放置在控制器中。

+0

爲「每3秒」,應該使用$ interval而不是$ timeout – kwangsa

+0

你是對的;我寫得很快。謝謝! – tyler