自己闲来无事使用uniapp编写app,发现在
中有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编译后还有一些样式上的变化。所以还需要一些调试和适配。
也有可能是我写的练手项目的样式不够牢固把つ﹏⊂。