Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a difference between promise.then.then vs promise.then; promise.then [duplicate]

I want to know is there a difference between following two?

  1. aPromiseObj.then(fn1).then(fn2).catch(fn3);
  2. aPromiseObj.then(fn1); aPromiseObj.then(fn2); aPromiseObj.catch(fn3);

Will the work flow changed?

ps: I am in angular environment, though I would like to think this in a broader term.

like image 626
garyx Avatar asked Aug 26 '15 01:08

garyx


People also ask

Can I return a promise with a then?

then() The then() method returns a Promise . It takes up to two arguments: callback functions for the success and failure cases of the Promise .

What is promise then?

A promise is a pattern for handling asynchronous operations. The promise allows you to call a method called "then" that lets you specify the function(s) to use as the callbacks.

What is the then and catch in promise JavaScript?

In summary: then : when a promise is successful, you can then use the resolved data. catch : when a promise fails, you catch the error, and do something with the error information. finally : when a promise settles (fails or passes), you can finally do something.

Does promise all go in order?

Here, Promise. all() method is the order of the maintained promises. The first promise in the array will get resolved to the first element of the output array, the second promise will be a second element in the output array and so on.


1 Answers

You have asked about "chaining" vs. "branching".

Assuming that f1 and f2 represent asynchronous operations that return promises, yes there is a significant difference. For option 1:

  1. It serializes fn1 and fn2 so that fn2 is not called until after the promise returned by fn1 has been resolved.
  2. .catch() applies to an error in either fn1 or fn2 or if aPromiseObj rejects.
  3. fn2 will not be called if fn1 rejects.

For option 2:

  1. fn2 does not wait for fn1 to resolve. fn2 is called as soon as fn1 returns similar to fn1(); fn2();. This means the async operations started by fn1 and fn2 will both be in-flight at the same time (sometimes referred to running in parallel instead of running serially).
  2. The .catch() does not apply to either because it is not on the promise that is created by either of the .then() calls. The .catch() in option 2, only applies to if aPromiseObj rejects, not f1() or f2().
  3. Both fn1 and fn2 will be called regardless of an error in either.

Another related question/answer: Understanding javascript promises; stacks and chaining

like image 144
jfriend00 Avatar answered Oct 06 '22 05:10

jfriend00