TIPS
问题背景
移动端或有些低版本浏览器不支持 Promise.finally
# 手动重写Promise原型
// promiseFinally.js
export default function (onfinally) {
// 获取构造函数的原因是以前的promise实现有第三方的存在
const P = this.constructor;
return this.then(
// 不直接执行onfinally后return是为了防止onfinally是个异步函数
(value) => P.resolve(onfinally()).then(() => value),
(reason) => P.resolve(onfinally()).then(() => { throw reason; }),
);
}
// main.js
import promiseFinally from 'promiseFinally';
Promise.prototype.finally = promiseFinally;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 插件
npm i promise.prototype.finally
1
// main.js
require('promise.prototype.finally').shim();
1
2
2