Open xianzou opened 3 years ago
finally() 方法返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式。 这避免了同样的语句需要在then()和catch()中各写一次的情况;
finally() 方法返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式。
finally()
Promise
这避免了同样的语句需要在then()和catch()中各写一次的情况;
then()
catch()
Promise.finally存在兼容性问题,并不是所有的浏览器都支持,但是有finally又很方便,可以通过垫片实现;
Promise.finally
finally
单页应用入口JS引入如下代码:
JS
import 'regenerator-runtime/runtime'; if (!Promise.prototype.finally) { // eslint-disable-next-line func-names Promise.prototype.finally = function (callback) { const P = this.constructor; return this.then( value => P.resolve(callback()).then(() => value), reason => P.resolve(callback()).then(() => { throw reason; }) ); }; }
后续的promise就可以支持finally了;
示例:
const queryData = async () => { Spin.show('信息获取中...'); //这样无论这个query接口是否正常还是异常,都会执行Spin.hide去关闭遮罩层,否则还需要再catch中也写一遍 const data = await query().finally(Spin.hide); if(data){ .... } }
Promise.finally
存在兼容性问题,并不是所有的浏览器都支持,但是有finally
又很方便,可以通过垫片实现;单页应用入口
JS
引入如下代码:后续的promise就可以支持
finally
了;示例: