详解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 相关文章推荐
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
JS替换字符串中空格方法
Apr 17 Javascript
jQuery基于图层模仿五星星评价功能的方法
May 07 Javascript
JS中数组重排序方法
Nov 11 Javascript
javascript实现页面滚屏效果
Jan 17 Javascript
JavaScript计时器用法分析【setTimeout和clearTimeout】
Jan 18 Javascript
BootStrap组件之进度条的基本用法
Jan 19 Javascript
简单实现js放大镜效果
Jul 24 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
Sep 21 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 Javascript
原生js实现点击按钮复制内容到剪切板
Nov 19 Javascript
关于angular 8.1使用过程中的一些记录
Nov 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
第八节 访问方式 [8]
2006/10/09 PHP
详解PHP显示MySQL数据的三种方法
2008/06/05 PHP
功能齐全的PHP发送邮件类代码附详细说明
2008/07/10 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHPEXCEL 使用小记
2013/01/06 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
2016/11/05 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
Prototype Class对象学习
2009/07/19 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
js对象基础实例分析
2015/01/13 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
2015/05/29 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
jquery拖动改变div大小
2017/07/04 jQuery
js编写简单的聊天室功能
2017/08/17 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
如何编写一个完整的Angular4 FormText 组件
2017/11/18 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
详解如何理解vue的key属性
2019/04/14 Javascript
layui数据表格重载实现往后台传参
2019/11/15 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
Python用list或dict字段模式读取文件的方法
2017/01/10 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
摄影专业毕业生求职信
2014/03/13 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
党员反对四风思想汇报范文
2014/10/25 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
建党伟业电影观后感
2015/06/01 职场文书