Is there a difference between promise.then.then vs promise.then; promise.then [duplicate]
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:
- It serializes
fn1
andfn2
so thatfn2
is not called until after the promise returned byfn1
has been resolved. -
.catch()
applies to an error in eitherfn1
orfn2
or ifaPromiseObj
rejects. -
fn2
will not be called iffn1
rejects.
For option 2:
-
fn2
does not wait forfn1
to resolve.fn2
is called as soon asfn1
returns similar tofn1(); fn2();
. This means the async operations started byfn1
andfn2
will both be in-flight at the same time (sometimes referred to running in parallel instead of running serially). - 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 ifaPromiseObj
rejects, notf1()
orf2()
. - Both
fn1
andfn2
will be called regardless of an error in either.
Another related question/answer: Understanding javascript promises; stacks and chaining