详解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 相关文章推荐
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
Aug 31 Javascript
javascript加号"+"的二义性说明
Mar 04 Javascript
javascript面向对象之this关键词用法分析
Jan 13 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
jQuery获取父元素节点、子元素节点及兄弟元素节点的方法
Apr 14 Javascript
AngularJS基础 ng-switch 指令简单示例
Aug 03 Javascript
Vue组件BootPage实现简单的分页功能
Sep 12 Javascript
原生和jQuery的ajax用法详解
Jan 23 Javascript
Vue组件全局注册实现警告框的实例详解
Jun 11 Javascript
javascript面向对象三大特征之多态实例详解
Jul 24 Javascript
JS使用H5实现图片预览功能
Sep 30 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
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对象在内存中的存在形式分析
2015/02/03 PHP
php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
学习Node.js模块机制
2016/10/17 Javascript
微信小程序开发探究
2016/12/27 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
elementUI同一页面展示多个Dialog的实现
2020/11/19 Javascript
python实现字典(dict)和字符串(string)的相互转换方法
2017/03/01 Python
Python连接phoenix的方法示例
2017/09/29 Python
恢复百度云盘本地误删的文件脚本(简单方法)
2017/10/21 Python
python实现教务管理系统
2018/03/12 Python
浅谈python中np.array的shape( ,)与( ,1)的区别
2018/06/04 Python
浅析python中numpy包中的argsort函数的使用
2018/08/30 Python
Django中使用Celery的方法示例
2018/11/29 Python
Python笔记之观察者模式
2019/11/20 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
求职信模版
2013/11/30 职场文书
大学生自我鉴定
2013/12/16 职场文书
自我鉴定写作要点
2014/01/17 职场文书
重阳节登山活动方案
2014/02/03 职场文书
汽车维修工岗位职责
2014/02/12 职场文书
三万活动总结
2014/04/28 职场文书
电子工程求职信
2014/07/17 职场文书
公务员群众路线专题民主生活会发言材料
2014/09/17 职场文书
见义勇为事迹材料
2014/12/24 职场文书
初中团支书竞选稿
2015/11/21 职场文书
网络研修心得体会
2016/01/08 职场文书
python如何利用traceback获取详细的异常信息
2021/06/05 Python