A promise chain is a sequence of linked Promise reactions. Each then or catch returns a new promise, passing its result or failure to the next step. This creates a unidirectional flow of data transformations. section 8.2.3
Link each transformation
Promise.resolve('aabbcc')\n .then(unique)\n .then(join)\n .then(toUpper);\n\nEvery handler receives the preceding step's result. Calling handlers separately on the same promise creates disjoint operations rather than a chain.
Return nested promises when an inner asynchronous flow must rejoin the outer chain; omitting return lets its result or error escape. A catch can recover with a default value, while finally performs completion work.

