Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Defining then() after promise has been retrieved

I have a question about attaching callback functions to promises in AngularJS.

Suppose I have a service with a function that returns a promise. I make a call to this function and store the promise locally. Then I define a callback function on the promise.

var promise = TestService.get();
console.log('We have a promise!');
promise.then(function (result){
  console.log('Here is the result:'+result);
});

In this case, we have a potentially risky situation. If the promise is resolved before we get to promise.then(..., the result is not outputted to the console (until the next digest cycle).

Alternatively, I could write the above code like this:

TestService.get().then(function (result){
  console.log('Here is the result:'+result);
});

My question:

Has the risk been mitigated in the second example? And if not, how can I make sure that the promise does not resolve before I have attached a callback? A slightly more elaborate answer than yes/no would be much appreciated :)

like image 553
gummbahla Avatar asked Mar 14 '23 01:03

gummbahla


1 Answers

The behavior you are describing does not occur, that can be seen through a simple example. Here we have a simple promise factory which returns a promise which resolves immediately.

'use strict';
var make = function() {
  return new Promise(function(resolve, reject) {
    resolve(2);
  });
};

Then we create a new promise and assign it to a variable

var prom = make();

We can call .then on it as many times as we want. This is because promises are immutable, we don't change the original value by chaining methods on it.

prom.then(a => console.log(a));
// 2
prom.then(a => console.log(a));
// 2
like image 142
Jonah Williams Avatar answered Mar 25 '23 19:03

Jonah Williams