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
Post a Comment