Promise的finally兼容

2020/12/8 JavaScriptPromise

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

# 插件

npm i promise.prototype.finally
1
// main.js
require('promise.prototype.finally').shim();
1
2
最近更新: 2024年09月25日 16:42:19