javascript - One-time resolving promise singleton (Angular service) -


the question applies promises in general , isn't specific angular, example makes use of angular $q , service singletons.

here a plunker

var app = angular.module('app', []);  app.factory('onetimeresolvingservice', function ($q) {   var promise = $q(function(resolve, reject) {     settimeout(function () {       resolve();     }, 500);   });    return promise; });  app.controller('acontroller', function (onetimeresolvingservice, $q) {   onetimeresolvingservice.then(function () {     console.log('a resolved');     return $q.reject();   }).then(function () {     console.log('a resolved');   }); });  app.controller('bcontroller', function (onetimeresolvingservice, $q) {   onetimeresolvingservice.then(function () {     console.log('b resolved');     return $q.reject();   }).then(function () {     console.log('b resolved');   }); }); 

and document is

  <body ng-app="app">     <div ng-controller="acontroller"></div>     <div ng-controller="bcontroller"></div>   </body> 

it naturally output

a resolved

b resolved

what pattern make singleton promise resolve first time, i.e.

a resolved

and not subsequent times?

something onetimeresolvingservice.$$state.status = 2 possibly can trick, looks $q hack , smells bad.

t.j. crowder correct in functionality you're looking in promise not exist. question of how achieve you're looking can found in structure below:

    function onetimevalue($q) {         var promisedvalue = $q(function(resolve, reject) {             settimeout(function () {resolve('the 1 time value');}, 500);         });          var valuegot = false;         this.getvalue = function getvalue() {             var res;             if (!valuegot) {                 res = promisedvalue;             } else {                 res = $q(function(resolve, reject) {                     resolve(null);                 });             }             valuegot = true;              return res;         };     } 

assuming new once (as angular services do), getvalue() return promisified string upon first call. subsequent calls return null.

this plunker shows above in action


Comments

Popular posts from this blog

dns - How To Use Custom Nameserver On Free Cloudflare? -

python - Pygame screen.blit not working -

c# - Web API response xml language -