admin管理员组

文章数量:1558087

【背景】测试反馈问题,某h5列表页IOS9中列表不显示,其他机型和环境正常

【问题排查】抓包发现请求没有发出,检查代码发现请求列表之前调用了某个接口使用了promise的finally的语法,处理了请求后统一操作,怀疑是低版本浏览器不兼容此语法,去掉finally之后列表请求可以发出

【问题解决】

考虑系统中很多页面都使用了finally的语法处理,选择全局进行兼容,参考文章浏览器不支持promise的finally - 迷离不迷离 - 博客园引入promise.prototype.finally,

两种写法:

1、require引入垫片执行,可以直接按文章中提到的在项目main.js里面引入require('promise.prototype.finally').shim(),

2、import 引入,去看了看安装的promise.prototype.finally的readme的usage,如下

Most common usage:
```js
var assert = require('assert');
var promiseFinally = require('promise.prototype.finally');

var resolved = Promise.resolve(42);
var rejected = Promise.reject(-1);

promiseFinally(resolved, function () {
	assert.equal(arguments.length, 0);

	return Promise.resolve(true);
}).then(function (x) {
	assert.equal(x, 42);
});

promiseFinally(rejected, function () {
	assert.equal(arguments.length, 0);
}).catch(function (e) {
	assert.equal(e, -1);
});

promiseFinally(rejected, function () {
	assert.equal(arguments.length, 0);

	throw false;
}).catch(function (e) {
	assert.equal(e, false);
});

promiseFinally.shim(); // will be a no-op if not needed

简单点直接垫片调用

import prototypeFinally from 'promise.prototype.finally';
prototypeFinally.shim();

特此记录~

本文标签: 写法全局版本浏览器不兼容版本