详解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 相关文章推荐
任意位置显示html菜单
Feb 01 Javascript
FireFox下XML对象转化成字符串的解决方法
Dec 09 Javascript
jquery弹出框的用法示例(一)
Aug 26 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
Apr 20 Javascript
详解javascript高级定时器
Dec 31 Javascript
jQuery Easyui使用(二)之可折叠面板动态加载无效果的解决方法
Aug 17 Javascript
Bootstrap table 定制提示语的加载过程
Feb 20 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
浅谈vuex actions和mutation的异曲同工
Dec 13 Javascript
了解JavaScript中的选择器
May 24 Javascript
JavaScript数组 几个常用方法总结
Nov 11 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
linux实现php定时执行cron任务详解
2013/12/24 PHP
php中使用array_filter()函数过滤空数组的实现代码
2014/08/19 PHP
php 中的closure用法详解
2017/06/12 PHP
PHP实现计算器小功能
2020/08/28 PHP
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
jQuery使用$.ajax进行即时验证实例详解
2015/12/11 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
vue.js 初体验之Chrome 插件开发实录
2017/05/13 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
ng-zorro-antd 入门初体验
2018/12/03 Javascript
详解一次Vue低版本安卓白屏问题的解决过程
2019/05/30 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
[05:03]2018DOTA2亚洲邀请赛主赛事首日回顾
2018/04/04 DOTA
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
跟老齐学Python之用while来循环
2014/10/02 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
2015/05/06 Python
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
基于Python的一个自动录入表格的小程序
2020/08/05 Python
Web时代变迁及html5与html4的区别
2016/01/06 HTML / CSS
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
医学检验专业大学生求职信
2013/11/18 职场文书
小学科学教学反思
2014/01/26 职场文书
服装设计师职业生涯规划范文
2014/02/28 职场文书
法学求职信
2014/06/22 职场文书
学校交通安全责任书
2014/08/25 职场文书
员工培训协议书
2014/09/15 职场文书
房产公证委托书范本
2014/09/20 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
JavaScript ES6的函数拓展
2022/01/18 Javascript