详解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 相关文章推荐
引入JS文件IE6报语法错误或缺少对象问题的解决方法
Jan 09 Javascript
超级简单实现JavaScript MVC 样式框架
Mar 24 Javascript
JS判断当前页面是否在微信浏览器打开的方法
Dec 08 Javascript
谷歌Chrome浏览器扩展程序开发小记
Jan 06 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
Apr 05 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
May 27 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
BootStrap Select清除选中的状态恢复默认状态
Jun 20 Javascript
详解angularJS自定义指令间的相互交互
Jul 05 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
Nov 27 Javascript
解决VUE双向绑定失效的问题
Oct 29 Javascript
vue实现购物车加减
May 30 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-redis中文文档介绍
2013/02/07 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
js变换显示图片的实例
2013/04/16 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
通过Jquery.cookie.js实现展示浏览网页的历史记录超管用
2015/10/23 Javascript
js实现浏览器倒计时跳转页面效果
2016/08/12 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
koa-router源码学习小结
2018/09/07 Javascript
JS使用H5实现图片预览功能
2019/09/30 Javascript
js实现全选和全不选功能
2020/07/28 Javascript
玩转python爬虫之爬取糗事百科段子
2016/02/17 Python
python脚本监控docker容器
2016/04/27 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
英国袜子店:Sock Shop
2017/01/11 全球购物
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
中软Java笔试题
2012/11/11 面试题
医学院毕业生自荐信范文
2014/03/06 职场文书
小学生学习感言
2014/03/10 职场文书
《学会合作》教学反思
2014/04/12 职场文书
反邪教标语
2014/06/23 职场文书
植树节标语
2014/06/27 职场文书
工作犯错保证书
2015/05/11 职场文书
刑事辩护词范文
2015/05/21 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
2019年入党思想汇报
2019/03/25 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
python使用glob检索文件的操作
2021/05/20 Python