当前位置:主页 > 查看内容

在 promise 中 then 和 finally 有什么区别

发布时间:2021-04-14 00:00| 位朋友查看

简介:看上去 promise.prototype.then() 和 promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。 第一个也最明显的是 finally() 没有得到 promise 链的结果。由于 finally() 没有收到值,因此无法更改 promise 的已解决值。 newPromise……

看上去 promise.prototype.then() 和 promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。

第一个也最明显的是 finally() 没有得到 promise 链的结果。由于 finally() 没有收到值,因此无法更改 promise 的已解决值。

  1. new Promise((resolve, reject) => resolve(10)) 
  2.   .then(x => { 
  3.     console.log(x); // 10 
  4.     return x + 1; 
  5.   }) 
  6.   .finally(x => { 
  7.     console.log(x); // undefined 
  8.     return x + 2; 
  9.   }); 
  10. // Promise resolves to 11, the return value of then() 

另一个差异与错误处理以及如何解决 promise 链有关。有时,您可能想要推迟捕获 promise 链中的错误,从而允许你在其他地方处理。在这种情况下,promise 链的 then() 将不会被执行,而 finally() 会。并且如果上一个 catch() 抛出,你最终会处于相同的情形之下。

  1. new Promise((resolve, reject) => reject(0)) 
  2.   .catch(x => { 
  3.     console.log(x); // 0 
  4.     throw x; 
  5.   }) 
  6.   .then(x => { 
  7.     console.log(x); // 将不会执行 
  8.   }) 
  9.   .finally(() => { 
  10.     console.log('clean up'); // 'clean up' 
  11.   }); 
  12. // Uncaught (in promise) 0 

这里的重点是,除非有非常特殊的原因,否则不应该替换 then() 和 finally()。 根据经验,finally() 应该用于清理(清除超时,使引用为空,重置 UI 状态等)。

【责任编辑:赵宁宁 TEL:(010)68476606】
本文转载自网络,原文链接:http://mp.weixin.qq.com/s?__biz=MzI3NzIzMDY0NA==&mid=2247500494&idx=2&sn=1d6be39c0a268f198ae962f09c7c9567&chksm=eb6be795dc1c6e839657ac0d8021f9890bc9a991f07c9ef870c22e81e5c0cb55188766e5af9a&mpshare=1&s
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:从一道毫无人性的刁钻面试题说起 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐