angularjs - Angular: Rewriting function to use promise -


i'm using angular factory retrieves data feed , data manipulation on it.

i'd block app rendering first view until data preparation done. understanding need use promises this, , in controller use .then call functions can run promise resolves.

from looking at examples i'm finding difficult implement promise in factory. i'm not sure put defers , resolves. weigh in on best way implement one?

here working factory without promise:

angular.module('myapp.datahandler', []) // modular, name  .factory('datahandler', function ($rootscope, $state, storagehandler) {    var obj = {      initdata : function() {        storagehandler.defaultconfig = {clientname:'test_feed'};       storagehandler.prepdata = function(data) {         var = 0;         var maps = storagehandler.datamap;          = data.line_up.length;         while(i--) {          // loads of string manipulations here         }         return data;       }        // check localdata       if(typeof storagehandler.handle('localdata.favorites') == 'undefined') {         storagehandler.handle('localdata.favorites',[]);       }      },    };   return obj;  }); 

here's tried looking @ examples:

angular.module('myapp.datahandler', []) // modular, name  .factory('datahandler', function ($rootscope, $q, $state, storagehandler) {    var obj = {      initdata : function() {        var d = $q.defer(); // set defer        storagehandler.defaultconfig = {clientname:'test_feed'};       storagehandler.prepdata = function(data) {         var = 0;         var maps = storagehandler.datamap;          = data.line_up.length;         while(i--) {          // loads of string manipulations here         }         return data;       }        // check localdata       if(typeof storagehandler.handle('localdata.favorites') == 'undefined') {         storagehandler.handle('localdata.favorites',[]);       }       return d.promise; // return promise     },    };   return obj;  }); 

but nothing shown in console when use in controller:

datahandler.initdata() .then(function () {   // successful   console.log('success'); }, function () {   // failure   console.log('failure'); }) .then(function () {   // clause   console.log('done'); }); 

any thoughts?

like florian mentioned. asynchronous call not obvious in code you've shown.

here gist of want:

angular.module("myapp",[]).factory("myfactory",function($http,$q){   return {     //$http.get returns promise.      //which latched onto , chained in controller     initdata: function(){       return $http.get("myurl").then(function(response){         var data = response.data;         //do things...          return data;       },function(err){         //do stuff error..         return $q.reject(err);         //or throw err;         //as mentioned below returning new rejected promise slight anti-pattern,          //however, practical use case suppress logging,         //and allow specific throw/logging control service implemented (controller)                  });       }   } }).controller("myctrl",function(myfactory,$scope){   myfactory.initdata().then(function(data){     $scope.mydata = data;   },function(err){     //error loudly     $scope.error = err.message   })['finally'](function(){      //done.   }); }); 

Comments

Popular posts from this blog

android - Get AccessToken using signpost OAuth without opening a browser (Two legged Oauth) -

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: mockito -

google shop client API returns 400 bad request error while adding an item -