详解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 05 Javascript
js判断ie版本号的简单实现代码
Mar 05 Javascript
jQuery中is()方法用法实例
Jan 06 Javascript
js控制文本框只输入数字和小数点的方法
Mar 10 Javascript
举例讲解Node.js中的Writable对象
Jul 29 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
深入理解vue2.0路由如何配置问题
Jul 18 Javascript
jQuery:unbind方法的使用详解
Aug 14 jQuery
详解webpack的配置文件entry与output
Aug 21 Javascript
angular.js和vue.js中实现函数去抖示例(debounce)
Jan 18 Javascript
axios全局注册,设置token,以及全局设置url请求网段的方法
Sep 25 Javascript
JavaScript页面加载事件实例讲解
Sep 01 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判断字符以及字符串的包含方法属性
2008/08/30 PHP
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
vue中Axios的封装与API接口的管理详解
2018/08/09 Javascript
对angularJs中自定义指令replace的属性详解
2018/10/09 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
微信小程序地图实现展示线路
2020/07/29 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
[01:23:45]DOTA2-DPC中国联赛 正赛 CDEC vs Dragon BO3 第一场 1月22日
2021/03/11 DOTA
python 合并文件的具体实例
2013/08/08 Python
python控制台英汉汉英电子词典
2020/04/23 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
2018/03/31 Python
Python3获取电脑IP、主机名、Mac地址的方法示例
2019/04/11 Python
python3 Scrapy爬虫框架ip代理配置的方法
2020/01/17 Python
深入了解python列表(LIST)
2020/06/08 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
Expedia爱尔兰:酒店、机票、租车及廉价假期
2017/01/02 全球购物
百丽国际旗下购物网站:优购
2017/02/28 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
什么是Rollback Segment
2013/04/22 面试题
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
销售工作岗位职责
2013/12/24 职场文书
在校生自我鉴定
2014/01/23 职场文书
通信研究生自荐信
2014/02/01 职场文书
公司司机岗位职责范本
2014/03/03 职场文书
升职演讲稿范文
2014/05/23 职场文书
canvas多重阴影发光效果实现
2021/04/20 Javascript
Feign调用全局异常处理解决方案
2021/06/24 Java/Android
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技