详解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 相关文章推荐
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
Jan 02 Javascript
自己用jQuery写了一个图片的马赛克消失效果
May 04 Javascript
javascript中Date对象的getDay方法使用指南
Dec 22 Javascript
jQuery实现的漂亮表单效果代码
Aug 18 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
微信小程序 开发经验整理
Feb 15 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
react中Suspense的使用详解
Sep 01 Javascript
javascript 易错知识点实例小结
Apr 25 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
Oct 29 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 模板高级篇总结
2006/12/21 PHP
php下使用SMTP发邮件的代码
2008/01/10 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php备份数据库类分享
2015/04/14 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
PHP编程快速实现数组去重的方法详解
2017/07/22 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
javascript 放大镜 v1.0 基于Yui2 实现的放大镜效果
2010/03/08 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
2013/05/15 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
扩展JS Date对象时间格式化功能的小例子
2013/12/02 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例
2018/01/25 jQuery
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
记一次webpack3升级webpack4的踩坑经历
2018/06/12 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
python3中的md5加密实例
2018/05/29 Python
如何在Python中实现goto语句的方法
2019/05/18 Python
python文件排序的方法总结
2020/09/13 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
行政主管岗位职责
2013/11/18 职场文书
承诺书格式
2014/06/03 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python