详解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 学习笔记(六)
Dec 31 Javascript
DOM_window对象属性之--clipboardData对象操作代码
Feb 03 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
Aug 19 Javascript
轻松学习Javascript闭包函数
Dec 15 Javascript
jquery ajax局部加载方法详解(实现代码)
May 12 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
Jun 21 Javascript
AngularJS Ajax详解及示例代码
Aug 17 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
详解JavaScript执行模型
Nov 16 Javascript
JavaScript实现切换多张图片
Jan 27 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
php微信开发之谷歌测距
2018/06/14 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
动态添加js事件实现代码
2009/03/12 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
jQuery中even选择器的定义和用法
2014/12/23 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
如何提高Dom访问速度
2017/01/05 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
详解vue移动端项目的适配(以mint-ui为例)
2018/08/17 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
django用户登录验证的完整示例代码
2019/07/21 Python
keras 获取某层输出 获取复用层的多次输出实例
2020/05/23 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
百度JavaScript笔试题
2015/01/15 面试题
四年大学生活的自我评价范文
2014/02/07 职场文书
大一学生职业生涯规划
2014/03/11 职场文书
表彰会主持词
2014/03/26 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL
关于mysql中时间日期类型和字符串类型的选择
2021/11/27 MySQL