vue+axios+promise实际开发用法

vue+axios+promise实际开发用法

vuex 核心 & 数据响应式原理

vuex 使用总结(详解)

vue的双向绑定原理及实现

一、axios的介绍

  1. axios 是由 promise 封装的一个 http 的库。

  2. promise是 es6 为解决异步编程的。

什么是异步?

1. 不会按照浏览器的加载方式 由上到下。

  1. 前端哪里面有异步?

1. 回调函数

2. 定时器

3. 事件绑定

4. ajax

二、列举一个例子

  1. 针对这个例子 会出现 层层回调函数的嵌套 我们称为(回调地狱)

  2. 这样很不好 对我们后期的维护也很麻烦,所以出现了 promise
    在这里插入图片描述

axios它是基于promise的http库,可运行在浏览器端和node.js中,然后作者尤雨溪也是果断放弃了对其官方库vue-resource的维护,直接推荐axios库,小编我也是从vue-resource转换过来的,差别说不来,我们讲一下axios在实际开发中的用法
axios特点
1.从浏览器中创建 XMLHttpRequests
2.从 node.js 创建 http 请求
3.支持 Promise API
4.拦截请求和响应 (就是有interceptor)
5.转换请求数据和响应数据
6.取消请求
7.自动转换 JSON 数据
8.客户端支持防御 XSRF

一、promise是如何产生的

  1. promise并不是一个新的功能,它是一个类,它只是对 异步编程的代码进行整合,它是解决异步(层层嵌套的这种关系),让你的代码看起来更简洁。

  2. 在 es6 中 promise是一个类(构造函数),使用它需要 new 实例。

注意:

在 es5 里 类和构造函数是一个意思,在es6中 类是类,构造函数是构造函数

  1. 只要创建一个 promise 实例的时候都处于 pending (进行中)状态。

  2. promise 构造函数接受一个函数作为参数,该参数的两个参数分别是 resolve 和 rejected,当你成功调用 resolve 当你失败调用 rejected。

promise 的使用方法:

1. then 是成功的,catch是失败的,

2. 第一个函数是成功函数,第二个是失败函数,

3. 成功函数来自 resolve(),

4. 失败函数来自于 reject(),

5. p1 是在内存中存放着,如果我想使用它,就需要通过 点 操作符去使用,

6. then 如果里面有两个函数,第一个是成功,第二个是失败,如果有一个函数就是成功函数,

安装axios和qs
npm i axios --save
npm i qs–save
创建项公共模块API
我是用vue-cli创建的项目在src->util->api.js(公共请求模块js)

引入axios和qs

import axios from ‘axios’
有时候向后端发送数据,后端无法接收,考虑使用qs模块

import qs from ‘qs’
判定开发模式

if (process.env.NODE_ENV == ‘development’) {

axios.defaults.baseURL = '/api';

}else if (process.env.NODE_ENV == ‘debug’) {

axios.defaults.baseURL = 'http://v.juhe.cn';

}else if (process.env.NODE_ENV == ‘production’) {

axios.defaults.baseURL = 'http://v.juhe.cn';

}
全局设置头部信息

axios.defaults.headers.post[‘Content-Type’] = ‘application/x-www-form-urlencoded;charset=UTF-8’;
全局设置超时时间

axios.defaults.timeout = 10000;
请求路由拦截

在请求发出去之前,可以做一些判断,看是否是合法用户

axios.interceptors.request.use(function (config) {
// 一般在这个位置判断token是否存在
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
响应拦截

axios.interceptors.response.use(function (response){
// 处理响应数据
if (response.status === 200) {
return Promise.resolve(response);
} else {
return Promise.reject(response);
}
}, function (error){
// 处理响应失败
return Promise.reject(error);
});
封装请求方法
使用ES6模块化export导出import导入

在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库, 而像seaJS是基于CMD规范的模块化库, 两者都是为了为了推广前端模块化的工具,现在ES6自带了模块化,不过现代浏览器对模块(module)支持程度不同, 需要使用babelJS, 或者Traceur把ES6代码转化为兼容ES5版本的js代码;

get请求

export function get(url, params){
return new Promise((resolve, reject) =>{
axios.get(url, {
params: params
}).then(res => {
resolve(res.data);
}).catch(err =>{
reject(err.data)
})
});
}
post请求

export function post(url, params) {
return new Promise((resolve, reject) => {
axios.post(url, qs.stringify(params))
.then(res => {
resolve(res.data);
})
.catch(err =>{
reject(err.data)
})
});
}
实际使用
在main.js中引入js

import {get,post} from ‘./utils/api’
//将方法挂载到Vue原型上
Vue.prototype.get = get;
Vue.prototype.post = post;
配置请求环境
这里通过devServer请求代理
当在请求过程中有/api字符串会自动转换为目标服务器地址(target)

devServer: {
historyApiFallback: true,
hot: true,
inline: true,
stats: { colors: true },
proxy: {
//匹配代理的url
‘/api’: {
// 目标服务器地址
target: ‘http://v.juhe.cn’,
//路径重写
pathRewrite: {‘^/api’ : ‘’},
changeOrigin: true,
secure: false,
}
},
disableHostCheck:true
}
这是请求聚合数据的接口为列子

this.get(‘/toutiao/index?type=top&key=秘钥’,{})
.then((res)=>{
if(res.error_code===0){
resolve(res);
}else{
//这里抛出的异常被下面的catch所捕获
reject(error);
}
})
.catch((err)=>{
console.log(err)
})
返回数据

图片描述

使用promise
1.比如用户想请求url1接口完后再调url2接口

var promise = new Promise((resolve,reject)=>{let url1 = '/toutiao/index?type=top&key=秘钥'this.get(url,{}).then((res)=>{resolve(res);}).catch((err)=>{console.log(err)})
});
promise.then((res)=>{let url2 = '/toutiao/index?type=top&key=秘钥'this.get(ur2,{}).then((res)=>{//只有当url1请求到数据后才会调用url2,否则等待resolve(res);}).catch((err)=>{console.log(err)})
})

Promise对象

Promise有三种状态
pending: 等待中,或者进行中,表示还没有得到结果
resolved: 已经完成,表示得到了我们想要的结果,可以继续往下执行
rejected: 也表示得到结果,但是由于结果并非我们所愿,因此拒绝执(用catch捕获异常)
这三种状态不受外界影响,而且状态只能从pending改变为resolved或者rejected,并且不可逆(顾名思义承诺的后的东西怎么又能返回呢)。在Promise对象的构造函数中,将一个函数作为第一个参数。而这个函数,就是用来处理Promise的状态变化

这里要注意,不管是then或者catch返回的都是一个新的Promise实例!而每个Primise实例都有最原始的Pending(进行中)到Resolve(已完成),或者Pending(进行中)到Reject(已失败)的过程

Promise基本用法

Promise.all()用法

var p = Promise.all([p1, p2, p3]);
all()接受数组作为参数。p1,p2,p3都是Promise的实例对象,p要变成Resolved状态需要p1,p2,p3状态都是Resolved,如果p1,p2,p3至少有一个状态是Rejected,p就会变成Rejected状态

Promise.race()用法

var p = new Promise( [p1,p2,p3] )
只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数,p的状态就会改变Resolved状态

Promise resolve()用法

Promise.resolve(‘foo’)
// 等价于
new Promise(resolve => resolve(‘foo’))
有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用.

Promise reject()用法

Promise.reject(‘foo’)
// 等价于
new Promise(reject => reject(‘foo’))
Promise.reject(reason)方法也会返回一个新的 Promise 实例,该实例的状态为rejected。但是Promise.reject()方法的参数,会原封不动地作为reject的理由,变成后续方法的参数。这一点与Promise.resolve方法不一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/654005.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【大数据】Flink 架构(六):保存点 Savepoint

《Flink 架构》系列(已完结),共包含以下 6 篇文章: Flink 架构(一):系统架构Flink 架构(二):数据传输Flink 架构(三):事件…

你这人能不能灵活点?前端代码简单优化一下?

公众号:程序员白特,可jia前端qun 背景 贴近目前公司的业务,做的增删改查比较多。基本上都是做一些表格的业务系统比较多,因此在写的过程中,都会遇到一些优化的细点,仅供参考,觉得好的可以采纳&a…

FairGuard游戏加固入选《CCSIP 2023中国网络安全行业全景册(第六版)》

2024年1月24日, FreeBuf咨询正式发布《CCSIP 2023中国网络安全行业全景册(第六版)》。本次发布的全景图,共计展示20个一级分类、108个细分安全领域,旨在为广大企业提供网络安全产品选型参考,帮助企业了解中国网络安全技术与市场的…

C++11——新的类功能与可变参数模板

系列文章目录 文章目录 系列文章目录一、新的类功能默认成员函数类成员变量初始化强制生成默认函数的关键字default禁止生成默认函数的关键字delete继承和多态中的final与override关键字 二、可变参数模板递归函数方式展开参数包逗号表达式展开参数包STL容器中的empalce_back与…

100天精通鸿蒙从入门到跳槽——第20天:ArkTS装饰器@Link双向数据绑定

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通Golang》 — Go语言学习之旅!《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!100天…

免费分享一套微信小程序外卖跑腿点餐(订餐)系统(uni-app+SpringBoot后端+Vue管理端技术实现) ,帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的微信小程序外卖跑腿点餐(订餐)系统(uni-appSpringBoot后端Vue管理端技术实现) ,分享下哈。 项目视频演示 【免费】微信小程序外卖跑腿点餐(订餐)系统(uni-appSpringBoot后端Vue管理端技术实现)…

【开源】基于JAVA语言的毕业生追踪系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登陆注册模块2.2 学生基本配置模块2.3 就业状况模块2.4 学历深造模块2.5 信息汇总分析模块2.6 校友论坛模块 三、系统设计3.1 用例设计3.2 实体设计 四、系统展示五、核心代码5.1 查询我的就业状况5.2 初始化就业状况5.…

SSL加密证书免费申请

首先,让我们来了解一下SSL证书的基本作用。SSL证书通过公钥和私钥的非对称加密技术,使得服务器与浏览器之间的通信内容得到高强度加密,同时验证网站的真实身份,从而提升用户的信任度,也是搜索引擎排名优化的一个重要因…

Idea设置代理后无法clone git项目

背景 对于我们程序员来说,经常上github找项目、找资料是必不可少的,但是一些原因,我们访问的时候速度特别的慢,需要有个代理,才能正常的访问。 今天碰到个问题,使用idea工具 clone项目,速度特…

2.【Vue3】Vue 基本使用——局部使用Vue

文章目录 1. 快速入门2. 常用指令2.1 v-for2.2 v-bind2.3 v-if 与 v-show2.4 v-on2.5 v-model 3. 生命周期4. Ajax 函数库 Axios4.1 Axios 基本使用4.2 Axios 请求方式别名 1. 快速入门 现在需要将 “hello vue3” 这样一个字符串渲染到页面上进行展示。 这个需求并不陌生&…

Vue-Cli3 - 从安装 nodejs 配置环境 ~ 搭建 cli 脚手架项目全过程

目录 前言提示 一、安装 & 配置 nodejs 1.1、安装 nodejs 1.2、配置必要目录 1.3、配置环境变量 1.4、测试 安装&配置 是否成功 1.5、安装淘宝镜像 1.5、cnpm 安装(推荐安装) 二、vue-cli3 创建项目 2.1、vue-cli2 和 vue-cli3 主要区…

C语言——N / 自定义类型:联合和枚举

目录 一、联合体 1、联合体类型的声明 2、联合体的特点 3、相同成员的结构体和联合体对比 4、联合体大小的计算 5、联合的一个练习 二、枚举类型 1、枚举类型的声明 2、枚举类型的优点 3、枚举类型的使用 一、联合体 1、联合体类型的声明 像结构体⼀样,…

批量导出域控用户及其所在OU和组

在Windows域环境中,批量导出域控用户及其所在OU(组织单位)和组成员身份信息,可以使用PowerShell脚本实现。以下是一个基本的示例脚本: Import-Module ActiveDirectory# 遍历所有用户 Get-ADUser -Filter * -Propertie…

GitLab16.8配置webhooks、Jenkins2.4配置GitLab插件实现持续集成、配置宝塔面板实现持续部署(其三)

看本篇文章的前提是已经部署完GItlab和Jenkins服务器,已经可以手动构建成功,并且经过了很多次实践,对这两款软件基本熟悉。 建议大家按以下顺序看 前端自动化(其一)部署gitlab 前端自动化(其二&#xff0…

05.领域驱动设计:认识领域事件,解耦微服务的关键

目录 1、概述 2、领域事件 2.1 如何识别领域事件 1.微服务内的领域事件 2.微服务之间的领域事件 3、领域事件总体架构 3.1 事件构建和发布 3.2 事件数据持久化 3.3 事件总线 (EventBus) 3.4 消息中间件 3.5 事件接收和处理 4、案例 5、总结 1、概述 在事件风暴&a…

百川智能发布超千亿大模型Baichuan 3

1月29日,百川智能发布超千亿参数的大语言模型Baichuan 3。在多个权威通用能力评测如CMMLU、GAOKAO和AGI-Eval中,Baichuan 3都展现了出色的能力,尤其在中文任务上更是超越了GPT-4。而在数学和代码专项评测如MATH、HumanEval和MBPP中同样表现出…

【Delphi】系统菜单中增加菜单项

目录 一、问题提出 二、程序截图 ​编辑 ​编辑 三、程序代码: 一、问题提出 我们在开发windows程序的时候,可能会希望在窗体的系统菜单中增加一个菜单项,那么如何实现呢,实际上通过调用windows API是可以实现的,…

go学习之air库的使用

首先下载air库 go install github.com/cosmtrek/air之后你需要去找到库下载的地方,若使用的是go mod可以使用命令 go env GOPATH找到下载库的位置 进入后,有bin,pkg目录,进入bin目录,你能看到air.exe文件 这时候将此…

备战蓝桥杯---二分(入门)

话不多说,先来个模板题来回顾一下上次讲的: 下面是AC代码: 下面进入正题: 本题对1,2行与3,4行组合,再用二分查找即可实现n^2logn的复杂度。 下面是AC代码: 接题: 让我们…

【更新】中国各省市是否属于“宽带中国”试点及“千兆城市”DID数据(2010-2023)

一、数据介绍 数据名称:【更新】中国各省市是否属于“宽带中国”试点及“千兆城市”DID数据 数据范围:全国所有地市 数据年份:2010-2023年 数据来源: “宽带中国”试点城市,来自工信部和国家发改委在2014年、2015…