详解vue-resource promise兼容性问题

发布时间 - 2026-01-11 01:57:33    点击率:

背景

其实这个问题在之前的项目开发中就出现过,但是当初只解决问题了,并没有针对问题作总结;于是乎今天踩到了自己埋的坑,所以决定记录一下。那么到底是什么问题呢?就是“在安卓低版本,如果你在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中尝个鲜

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# vue  # resource兼容性  # vue.js  # 兼容性问题  # vue兼容性问题  # Vue2.0在IE11版本浏览器中的兼容性问题  # vue中引入mousewheel事件及兼容性处理方式  # 详解Vue Cli浏览器兼容性实践  # vue脚手架搭建项目的兼容性配置详解  # 如何去除vue项目中的#及其ie9兼容性  # Vue中 引入使用 babel-polyfill 兼容低版本浏览器的方法  # Vue的兼容性解决方案Babel-polyfill案例解析  # 这个问题  # 很简单  # 链式  # 如何使用  # 都是  # 我就  # 也不  # 来了  # 是有  # 大家都  # 那就  # 上了  # 这就是  # 你在  # 只需  # 推荐使用  # 它是  # 我们可以  # 采用了  # 大功告成 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用虚拟主机快速搭建网站?详细步骤解析  中山网站推广排名,中山信息港登录入口?  个人网站制作流程图片大全,个人网站如何注销?  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何在服务器上配置二级域名建站?  教你用AI润色文章,让你的文字表达更专业  如何在七牛云存储上搭建网站并设置自定义域名?  北京网站制作公司哪家好一点,北京租房网站有哪些?  Android Socket接口实现即时通讯实例代码  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  北京专业网站制作设计师招聘,北京白云观官方网站?  php打包exe后无法访问网络共享_共享权限设置方法【教程】  微信小程序 五星评分(包括半颗星评分)实例代码  怎样使用JSON进行数据交换_它有什么限制  如何快速上传建站程序避免常见错误?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  Linux系统运维自动化项目教程_Ansible批量管理实战  浅谈Javascript中的Label语句  Laravel如何配置和使用队列处理异步任务_Laravel队列驱动与任务分发实例  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  如何用景安虚拟主机手机版绑定域名建站?  网易LOFTER官网链接 老福特网页版登录地址  浅谈redis在项目中的应用  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  原生JS获取元素集合的子元素宽度实例  开心动漫网站制作软件下载,十分开心动画为何停播?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel如何处理和验证JSON类型的数据库字段  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  javascript读取文本节点方法小结  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  Win10如何卸载预装Edge扩展_Win10卸载Edge扩展教程【方法】  JavaScript如何实现倒计时_时间函数如何精确控制  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  公司门户网站制作流程,华为官网怎么做?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何挑选优质建站一级代理提升网站排名?  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  Android使用GridView实现日历的简单功能  Laravel Octane如何提升性能_使用Laravel Octane加速你的应用  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?