详解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 相关文章推荐
jqeury eval将字符串转换json的方法
Jan 20 Javascript
可插入图片的TEXT文本框
Dec 27 Javascript
Iframe 自动适应页面的高度示例代码
Feb 26 Javascript
javascript日期操作详解(脚本之家整理)
Sep 05 Javascript
jQuery使用方法
Feb 04 Javascript
原生js编写2048小游戏
Mar 17 Javascript
vue.js学习之vue-cli定制脚手架详解
Jul 02 Javascript
原生JavaScrpit中异步请求Ajax实现方法
Nov 03 Javascript
nginx部署访问vue-cli搭建的项目的方法
Feb 12 Javascript
JS获取指定月份的天数两种实现方法
Jun 22 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
原生js实现日历效果
Mar 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
一个数据采集类
2007/02/14 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
php实现的mongodb操作类
2015/05/28 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php上传excel表格并获取数据
2017/04/27 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
javascript的document.referrer浏览器支持、失效情况总结
2014/07/18 Javascript
jQuery的remove()方法使用详解
2015/08/11 Javascript
BootStrap glyphicons 字体图标实现方法
2016/05/01 Javascript
vue.js表格组件开发的实例详解
2016/10/12 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
2016/12/21 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
Three.js入门之hello world以及如何绘制线
2017/09/25 Javascript
详解关于微信setData回调函数中的坑
2019/02/18 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
python获取指定时间差的时间实例详解
2017/04/11 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
Python扩展内置类型详解
2018/03/26 Python
解决tensorflow测试模型时NotFoundError错误的问题
2018/07/26 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
python 读取二进制 显示图片案例
2020/04/24 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
Python classmethod装饰器原理及用法解析
2020/10/17 Python
瑞典香水、须后水和美容产品购物网站:Parfym-Klick.se
2019/12/29 全球购物
Armor Lux法国官方网站:水手服装、成衣和内衣
2020/05/26 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
英语师范专业毕业生自荐信
2013/09/21 职场文书
2014年度个人工作总结
2014/11/07 职场文书
2014年人事工作总结范文
2014/11/19 职场文书