编写一个angularJS轮询器(Writing an angularJS poller)

编程入门 行业动态 更新时间:2024-10-28 04:30:39
编写一个angularJS轮询器(Writing an angularJS poller)

我试图在我的应用程序中使用$ http编写一个angularJS服务来进行长轮询。

这是我的代码:

app.factory('Poller', function($http, $timeout){ var poll = function(http, tick){ http.then(function(r){ $timeout(poll, tick); return r.data; }); }; return{ poll: poll }; });

基本的想法是在我需要轮询$ http调用时注入此服务。 我在控制器中使用它:

app.controller('myCtrl', function($scope, $http, Poller){ $scope.polledVar = Poller.poll($http.get('api/getVar'), 1000); });

使用此代码时,出现以下错误:

TypeError: Cannot call method 'then' of undefined

I'm trying to write an angularJS service for long polling in my application, using $http.

Here's my code :

app.factory('Poller', function($http, $timeout){ var poll = function(http, tick){ http.then(function(r){ $timeout(poll, tick); return r.data; }); }; return{ poll: poll }; });

The basic idea would be to inject this service whenever I need polling on a $http call. I'm using it inside a controller :

app.controller('myCtrl', function($scope, $http, Poller){ $scope.polledVar = Poller.poll($http.get('api/getVar'), 1000); });

When using this code I get the following error :

TypeError: Cannot call method 'then' of undefined

最满意答案

即使我不了解设计(架空设计imo),它是这样的:

app.factory('Poller', function($http, $timeout,$q){ var poll = function(http, tick){ return http.then(function(r){ var deferred = $q.defer(); $timeout(function(){ deferred.resolve(r); }, tick); return deferred.promise; }); }; return{ poll: poll }; });

你可以简单地传递像Poller.poll这样的url('api / getVar',1000);

UPDATE

只是为了玩:)和以下https://stackoverflow.com/a/16520050/356380

var app = angular.module('myModule', []); app.factory('Poller', function($http,$q){ return { poll : function(api){ var deferred = $q.defer(); $http.get(api).then(function (response) { deferred.resolve(response.data); }); return deferred.promise; } } }); app.controller('myCtrl', function($scope, $http,$filter ,Poller){ //Just to start $scope.myts = Poller.poll('mytest.php'); $scope.mydate = $scope.myts.then(function(data){ return $filter('date')(data,'yyyy-MM-dd HH:mm:ss Z'); }); var Repeater = function () { $scope.$apply(function () { $scope.myts = Poller.poll('mytest.php'); $scope.mydate = $scope.myts.then(function(data){ return $filter('date')(data,'yyyy-MM-dd HH:mm:ss Z'); }); }); }; var timer = setInterval(Repeater, 1000); });

mytest.php

echo time()*1000;

Even if I don't understand the design (overhead design imo) here is it:

app.factory('Poller', function($http, $timeout,$q){ var poll = function(http, tick){ return http.then(function(r){ var deferred = $q.defer(); $timeout(function(){ deferred.resolve(r); }, tick); return deferred.promise; }); }; return{ poll: poll }; });

You could simply pass the url like Poller.poll('api/getVar', 1000);

UPDATE

just to play around :) and following https://stackoverflow.com/a/16520050/356380

var app = angular.module('myModule', []); app.factory('Poller', function($http,$q){ return { poll : function(api){ var deferred = $q.defer(); $http.get(api).then(function (response) { deferred.resolve(response.data); }); return deferred.promise; } } }); app.controller('myCtrl', function($scope, $http,$filter ,Poller){ //Just to start $scope.myts = Poller.poll('mytest.php'); $scope.mydate = $scope.myts.then(function(data){ return $filter('date')(data,'yyyy-MM-dd HH:mm:ss Z'); }); var Repeater = function () { $scope.$apply(function () { $scope.myts = Poller.poll('mytest.php'); $scope.mydate = $scope.myts.then(function(data){ return $filter('date')(data,'yyyy-MM-dd HH:mm:ss Z'); }); }); }; var timer = setInterval(Repeater, 1000); });

mytest.php

echo time()*1000;

更多推荐

本文发布于:2023-08-07 20:02:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1465703.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:轮询器   angularJS   poller   Writing

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!