详解vue-resource promise兼容性问题


Posted in Javascript onJune 20, 2017

背景

其实这个问题在之前的项目开发中就出现过,但是当初只解决问题了,并没有针对问题作总结;于是乎今天踩到了自己埋的坑,所以决定记录一下。那么到底是什么问题呢?就是“在安卓低版本,如果你在vue项目中使用了vue-resource(vue-resource是什么?它是一个具有ajax功能的第三方npm包),那么http请求和响应都是正常的,但是,注意,但是来了啊!!但是响应进不去promise回调”,下面我们来具体看一下

 正题

一、Vue Resource如何使用?

大家都知道,我们在vue项目经常这样使用vue-resource

1.安装

npm install vue-resource --save

注:--save和--save-dev的区别就是,如果该npm包的代码需要被打包到上线文件,那就--save安装;否则就以--save-dev安装

2.初始化(在入口文件main.js文件中)

import Vue from 'vue'
 import VueResource from 'vue-resource'
 // 通过Vue.use使用vue-resource,然后$http对象就被添加到每个组件实例上了
 Vue.use(VueResource)

3.使用(在组件内)

this.$http.get(url, {}).then(function (response) {
 response.json().then(function(res) {
   // 这里是请求成功后的代码逻辑
 })
}, function (error) {
   // 这里是请求失败后的代码逻辑
   console.log(error)
})

二、问题

但实际在安卓低版本中会出现这个问题

this.$http.get(url, {}).then(function (response) {
 // 无论是成功还是失败,then中的代码是不会被执行的
 response.json().then(function(res) {
   // 不执行
 })
}, function (error) {
   // 也不执行
   console.log(error)
})

为何?其实vue-resource采用了ES6 Promise新特性(如何知道的?即使没看过vue-resource的官方文档,我们也可以知道,因为this.$http.get后面直接链式调用了then,then是Promise对象实例的方法,还记得不?),然后Promise本来就是有兼容性问题的,这就是问题的根本原因,那如何解决呢

三、解决方案

es6-promise可以解决这个问题,如何使用?很简单,看下面的代码

1.安装(安装到dependencies中)

npm install es6-promise --save

2.在入口文件main.js中引入使用

import Vue from 'vue'
import VueResource from 'vue-resource'
// cmd方式
require('es6-promise').polyfill()
// ES6模块方式
import Es6Promise from 'es6-promise'
Es6Promise.polyfill()

大功告成,是不是很简单,只需新增而无需删除现有代码,这样对于已经上线的项目是比较安全的

结语

Vue官方现已不推荐使用Vue Resource了,我们可以尝试一下axios,听说也很好用,我就打算在next project中尝个鲜

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
防止页面被iframe(兼容IE,Firefox火狐)
Jul 04 Javascript
javascript attachEvent绑定多个事件执行顺序问题
Oct 20 Javascript
jQuery 对Select的操作备忘记录
Jul 04 Javascript
jquery在IE、FF浏览器的差别详细探讨
Apr 28 Javascript
用js实现输入提示(自动完成)的实例代码
Jun 14 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
cookie的secure属性详解
Apr 08 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
Sep 26 Javascript
js 作用域和变量详解
Feb 16 Javascript
angularjs手动识别字符串中的换行符方法
Oct 02 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 #Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 #Javascript
vue中如何实现变量和字符串拼接
Jun 19 #Javascript
js实现随机数字字母验证码
Jun 19 #Javascript
解决vue-cli中stylus无法使用的问题方法
Jun 19 #Javascript
AngularJS  ng-repeat遍历输出的用法
Jun 19 #Javascript
ZeroClipboard.js使用一个flash复制多个文本框
Jun 19 #Javascript
You might like
PHP APC配置文件2套和参数详解
2014/06/11 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
Jquery 选中表格一列并对表格排序实现原理
2012/12/15 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
2017/02/23 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[01:07:53]RNG vs VG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python获得一个月有多少天的方法
2015/06/04 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
新年快乐! python实现绚烂的烟花绽放效果
2019/01/30 Python
Python3 实现爬取网站下所有URL方式
2020/01/16 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
高校生生产实习自我鉴定
2013/09/21 职场文书
建筑公司文秘岗位职责
2013/11/29 职场文书
学生处主任岗位职责
2013/12/01 职场文书
竞聘上岗演讲稿范文
2014/01/10 职场文书
迟到检讨书500字
2014/02/05 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
地下停车场租赁协议范本
2014/10/07 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
营销经理工作检讨书
2014/11/03 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
动漫APP软件排行榜前十名,半次元上榜,第一款由腾讯公司推出
2022/03/18 杂记