使用v3编译打包后Promise不支持finally方法

自己闲来无事使用uniapp编写app,发现在


image.png

中有2个选项,分别是v3编译器和fast启动模式。

然后自己就勾选了,编译后在chrome浏览器中运行没有问题,就尝试打包到安卓和ios下,上真机后发现网络请求一直转圈,自己就很诧异。

由于我项目中网络请求都使用了Promise异步方式。而且所有的请求完毕都使用的finally方法。类似如下:

onClick() {
    setTimeout(() => {
        let that = this;
        let promise, instance;
        that.context = "";
        promise = new Promise((resolve, reject) => {
            instance = uni.request({
                url: 'http://localhost:8008/api/goods-detail', //仅为示例,并非真实接口地址。
                data: {
                    sku_id: "1"
                },
                header: {
                    "Content-Type": "application/json",
                    "Authorization": "",
                    "Accept": "application/vnd.app.v1+json",
                },
                method:"POST",
                success: (res) => {
                    res.data = that.toJSON(res.data);
                    resolve(res);
                },
                fail: reject
            });
        });
        promise.then(r => {
            console.info(r)
            that.context += "resolve:成功得调用";
        });
        promise.catch(e => {
            console.info(e)
            that.context += "reject:异常失败调用"
        });
        promise.finally(f => {
            that.context += ";finally调用"
        });
    }, 1000);
}

使用v3打包后在调试中发现会报如下错误信息:

[JS Framework] Failed to execute the callback function:
TypeError: promise.finally is not a function. (In 'promise.finally(function (f) {

但是不使用v3编译则没问题,从而推断出v3编译不支持该特性。所以我就在main.js文件中加入如下代码解决该问题:

// 用于fixed 使用v3编译不支持finally回调
if (Promise.finally === undefined) {
    Promise.prototype.finally = function (callback) {
      let P = this.constructor;
      return this.then(
        value  => P.resolve(callback()).then(() => value),
        reason => P.resolve(callback()).then(() => { throw reason })
      );
    };
}

重新编译,打包OK

另外使用v3编译后还有一些样式上的变化。所以还需要一些调试和适配。
也有可能是我写的练手项目的样式不够牢固把つ﹏⊂。

你可能感兴趣的:(使用v3编译打包后Promise不支持finally方法)