AngularJS passing lastTime to a service to display only recent posts -


i not sure if going right way want achieve twitter feed effect.

i have statuses page, on first page load statuses , after display updates on page.

i have service calls api:

emp.services.socialservice = ['$http', '$q', function ($http, $q) {      var deferred = $q.defer();      $http.get('/api/feed').then(function (data) {         deferred.resolve(data);     });      this.getstatuses = function () {         return deferred.promise;     };      return {         getstatuses: this.getstatuses     };  }]; 

and controller:

emp.controllers.statusescontroller = ['socialservice', '$scope', '$interval',  function(socialservice, $scope, $interval) {      $scope.statuses = [];     $scope.lasttime = 0;      $scope.refreshstatuses = function() {          var statuses = socialservice.getstatuses();          statuses.then(function(data) {              $scope.statuses = data.data;              for(id in $scope.statuses) {                  item = $scope.statuses[id];              }          });     };      $scope.periodicrefresh = function() {         $scope.refreshstatuses();         $interval($scope.periodicrefresh, datainterval, true);     };      $scope.periodicrefresh();    }]; 

could please take @ , let me know how can improve it, push updates view. assume need somehow pass lasttime through api url can use grab updates, somehow push through view?

any help, tutorials etc appreciated.

when building services, try , keep "service-related" functionality inside service scope. reduce controller footprint in long run. in addition, it's important understand "promises" used throughout angular framework default. in case $http service returns promises.

please review service below:

emp.services.socialservice = ['$http', function ($http) {      var totalrefreshcount = 10,         currentrefreshcount = 0;      function getstatuses() {         return $http.get('/api/feed');     };      function updatetotalrefreshcount() {         currentrefreshcount = currentrefreshcount + 1;         return currentrefreshcount;     }      function shouldrunagain() {         return totalrefreshcount >= currentrefreshcount;     }      function resetcounter() {         currentrefreshcount = 0;         return;     }      return {         getstatuses: getstatuses,         shouldrunagain: shouldrunagain,         updatetotalrefreshcount: updatetotalrefreshcount,         resetcounter: resetcounter     };  }]; 

notice how "getstatuses" returns $http method? notice how i've started encapsulate "polling" and/or "recursion" logic here well. refers original statement, "try , keep service-related code in our service scope".

please review controller below:

emp.controllers.statusescontroller = ['socialservice', '$scope', '$timeout',  function(socialservice, $scope, $timeout) {      var datainterval = 1 // in seconds;      $scope.statuses = [];      $scope.refreshstatuses = function() {          socialservice.getstatuses().then(function(data) {              $scope.statuses = data.data;          });      };      $scope.periodicrefresh = function() {          $scope.refreshstatuses();          if (!socialservice.shouldrunagain())             return;          $timeout(function(){              $scope.periodicrefresh();              socialservice.updatetotalrefreshcount();          }, datainterval * 1000);      };      socialservice.resetcounter();     $scope.periodicrefresh();  }]; 

there variables code using didn't understand. example, "datainterval" , "item". used never defined...

"refreshstatuses" same code. looks identical had before. works "then" method. again, due $http returning promises.

for "polling", instead of creating interval instance, timeout instead. more appropriate approach recursion not creating unnecessary interval loops.

finally, logic recursion (ig "how many times should run" , "when should stop") held in service. because pertains service.

you take further moving "periodic" refresh service well. again, because service logic.

the result:

your api/feed fetched every 1 second course of 10 attempts.

please review areas there undefined variables.

angular trigger it's digest cycle. statuses updated every time refresh runs.


edit: adding time stamp api

emp.services.socialservice = ['$http', function ($http) {      var totalrefreshcount = 10,         currentrefreshcount = 0,         timestamp = null;      function getstatuses() {          // generate query param         var query = timestamp === null ? "" : "?ts=" + timestamp.tojson();          // update/create time stamp         timestamp = new date();          return $http.get('/api/feed' + query);     }      function updatetotalrefreshcount() {         currentrefreshcount = currentrefreshcount + 1;         return currentrefreshcount;     }      function shouldrunagain() {          if (totalrefreshcount >= currentrefreshcount) {             updatetotalrefreshcount();             return true;         }          return false;      }      function resetcounter() {         currentrefreshcount = 0;         timestamp = null;         return;     }      return {         getstatuses: getstatuses,         shouldrunagain: shouldrunagain,         resetcounter: resetcounter     };  }]; 

"getstatuses" contain time stamp query parameter whenever new request made.

our controller changes slightly:

emp.controllers.statusescontroller = ['socialservice', '$scope', '$timeout',  function(socialservice, $scope, $timeout) {      var datainterval = 1 // in seconds;      $scope.statuses = [];      $scope.refreshstatuses = function() {          socialservice.getstatuses().then(function(data) {              // appends new array existing.             $scope.statuses.push.apply($scope.statuses, data.data);          });      };      $scope.periodicrefresh = function() {          $scope.refreshstatuses();          if (!socialservice.shouldrunagain())             return;          $timeout($scope.periodicrefresh(), datainterval * 1000);      };      socialservice.resetcounter();     $scope.periodicrefresh();   }]; 

these small changes not solve your issues. need rely on server returning results have been created after time stamp.


Comments

Popular posts from this blog

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -

ubuntu - Selenium Node Not Connecting to Hub, Not Opening Port -