详解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 相关文章推荐
动态加载外部javascript文件的函数代码分享
Jul 28 Javascript
jquery实现奇偶行赋值不同css值
Feb 17 Javascript
javascript实现简单的贪吃蛇游戏
Mar 31 Javascript
基于angularjs实现图片放大镜效果
Aug 31 Javascript
JS输出空格的简单实现方法
Sep 08 Javascript
js异步编程小技巧详解
Aug 14 Javascript
JavaScript for循环 if判断语句(学习笔记)
Oct 11 Javascript
使用mpvue搭建一个初始小程序及项目配置方法
Dec 03 Javascript
angularjs自定义过滤器demo示例
Aug 24 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
Vant+postcss-pxtorem 实现浏览器适配功能
Feb 05 Javascript
小程序自定义轮播图圆点组件
Jun 25 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中的正则表达式
2014/08/17 PHP
ext combox 下拉框不出现自动提示,自动选中的解决方法
2010/02/24 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
深入浅析Vue不同场景下组件间的数据交流
2017/08/15 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
JavaScript实现AOP详解(面向切面编程,装饰者模式)
2017/12/19 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
vue 左滑删除功能的示例代码
2019/01/28 Javascript
JS通过识别id、value值对checkbox设置选中状态
2020/02/19 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
python 获取et和excel的版本号
2009/04/09 Python
Python配置文件解析模块ConfigParser使用实例
2015/04/13 Python
使用Python编写基于DHT协议的BT资源爬虫
2016/03/19 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
分析Python中解析构建数据知识
2018/01/20 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Tkinter中复选菜单是否被选中的判断与设置方式
2020/03/04 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
2014年人力资源部工作总结
2014/11/19 职场文书
中班上学期个人总结
2015/02/12 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
2016年八一建军节活动总结
2016/04/05 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Python使用华为API为图像设置多个锚点标签
2022/04/12 Python