看上去 promise.prototype.then() 和 promise.prototype.finally 似乎非常相似。但是你需要明白它们有一些重要的差异。
创新互联建站成立于2013年,我们提供高端成都网站建设、成都网站制作、成都网站设计、网站定制、成都全网营销推广、微信小程序、微信公众号开发、seo优化排名服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为成都葡萄架企业提供源源不断的流量和订单咨询。
第一个也最明显的是 finally() 没有得到 promise 链的结果。由于 finally() 没有收到值,因此无法更改 promise 的已解决值。
- new Promise((resolve, reject) => resolve(10))
- .then(x => {
- console.log(x); // 10
- return x + 1;
- })
- .finally(x => {
- console.log(x); // undefined
- return x + 2;
- });
- // Promise resolves to 11, the return value of then()
另一个差异与错误处理以及如何解决 promise 链有关。有时,您可能想要推迟捕获 promise 链中的错误,从而允许你在其他地方处理。在这种情况下,promise 链的 then() 将不会被执行,而 finally() 会。并且如果上一个 catch() 抛出,你最终会处于相同的情形之下。
- new Promise((resolve, reject) => reject(0))
- .catch(x => {
- console.log(x); // 0
- throw x;
- })
- .then(x => {
- console.log(x); // 将不会执行
- })
- .finally(() => {
- console.log('clean up'); // 'clean up'
- });
- // Uncaught (in promise) 0
这里的重点是,除非有非常特殊的原因,否则不应该替换 then() 和 finally()。 根据经验,finally() 应该用于清理(清除超时,使引用为空,重置 UI 状态等)。
新闻标题:在promise中then和finally有什么区别
URL标题:http://www.csdahua.cn/qtweb/news48/147598.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网