详解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 DOM学习第四章 getElementByTagNames
Feb 19 Javascript
AlertBox 弹出层信息提示框效果实现步骤
Oct 11 Javascript
node.js中的events.emitter.once方法使用说明
Dec 10 Javascript
JavaScript中模拟实现jsonp
Jun 19 Javascript
微信小程序开发探究
Dec 27 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
Mar 08 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
Jan 16 Javascript
JS实现获取毫秒值及转换成年月日时分秒的方法
Aug 15 Javascript
JavaScript中常用的简洁高级技巧总结
Mar 10 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
Apr 15 Javascript
微信小程序HTTP请求从0到1封装
Sep 09 Javascript
js实现复制粘贴的两种方法
Dec 04 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
磨咖啡豆的密诀
2021/03/03 冲泡冲煮
基于php split()函数的用法详解
2013/06/05 PHP
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
2013/08/21 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
ES6所改良的javascript“缺陷”问题
2016/08/23 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
浅析Vue中method与computed的区别
2018/03/06 Javascript
vue和webpack安装命令详解
2018/06/15 Javascript
在Node.js下运用MQTT协议实现即时通讯及离线推送的方法
2019/01/24 Javascript
express启用https使用小记
2019/05/21 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
react ant Design手动设置表单的值操作
2020/10/31 Javascript
Python使用代理抓取网站图片(多线程)
2014/03/14 Python
python3中zip()函数使用详解
2018/06/29 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
Django 自定义分页器的实现代码
2019/11/24 Python
python能否java成为主流语言吗
2020/06/22 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
HTML5资源预加载(Link prefetch)详细介绍(给你的网页加速)
2014/05/07 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
高中的职业生涯规划书
2013/12/28 职场文书
迟到检讨书300字
2014/02/14 职场文书
小学教师培训方案
2014/06/09 职场文书
会议欢迎词
2015/01/23 职场文书
刑事起诉书范文
2015/05/19 职场文书
早会开场白台词大全
2015/06/01 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
Django如何与Ajax交互
2021/04/29 Python
Python获取指定日期是"星期几"的6种方法
2022/03/13 Python
Python用tkinter实现自定义记事本的方法详解
2022/03/31 Python