11. Promise.prototype.finally()
This chapter explains the proposal “Promise.prototype.finally
” by Jordan Harband.
11.1. How does it work?
.finally()
works as follows:
finally
’s callback is always executed. Compare:
then
’s callback is only executed ifpromise
is fulfilled.catch
’s callback is only executed ifpromise
is rejected. Or ifthen
’s callback throws an exception or returns a rejected Promise. In other words: Take the following piece of code.
This piece of code is equivalent to:
11.2. Use case
The most common use case is similar to the most common use case of the synchronous finally
clause: cleaning up after you are done with a resource. That should always happen, regardless of whether everything went smoothly or there was an error.
For example:
11.3. .finally() is similar to finally {} in synchronous code
In synchronous code, the try
statement has three parts: The try
clause, the catch
clause and the finally
clause.
In Promises:
- The
try
clause very loosely corresponds to invoking a Promise-based function or calling.then()
. - The
catch
clause corresponds to the.catch()
method of Promises. - The
finally
clause corresponds to the new Promise method.finally()
introduced by the proposal. However, wherefinally {}
canreturn
andthrow
, returning has no effect inside the callback.finally()
, only throwing. That’s because the method can’t distinguish between the callback returning explicitly and it finishing without doing so.
11.4. Availability
- The npm package
promise.prototype.finally
is a polyfill for.finally()
. - V8 5.8+ (e.g. in Node.js 8.1.4+): available behind the flag
—harmony-promise-finally
(details).
11.5. Further reading
- “Promises for asynchronous programming” in “Exploring ES6”
当前内容版权归 exploringjs.com 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 exploringjs.com .