A then
callback doesn't execute when the promise is rejected - and that can happen even for a promise returned by a catch
invocation: when its callback throws or returns a rejected promise. err => console.error(err)
is probably not going to do that, but you never know.
Similarly, I would recommend to favour .then(…, …)
over .then(…).catch(…)
if you only want to handle errors from the original promise, not from the then
callback. I'd write
promise.then(console.log, console.error).finally(() => console.log('Finally'));
The other more or less obvious differences are in the signature: the finally
callback doesn't receive any arguments, and the promise that p.finally()
returns will fulfill/reject with the same result as p
(unless there's an exception or returned rejection in the callback).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…