In simple terms, inside a then handler function:
A) When x is a value (number, string, etc):
return xis equivalent toreturn Promise.resolve(x)throw xis equivalent toreturn Promise.reject(x)
B) When x is a Promise that is already settled (not pending anymore):
return xis equivalent toreturn Promise.resolve(x), if the Promise was already resolved.return xis equivalent toreturn Promise.reject(x), if the Promise was already rejected.
C) When x is a Promise that is pending:
return xwill return a pending Promise, and it will be evaluated on the subsequentthen.
Read more on this topic on the Promise.prototype.then() docs.