IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> ajax、promise封装ajax、axios -> 正文阅读

[JavaScript知识库]ajax、promise封装ajax、axios

本文章有使用提到的ajax案例进行promise封装

1. 常见异步操作:

使用回调函数实现:
1.AJAX请求
2.fs文件操作
3.数据库操作
4.定时器

2. ajax

在这里插入图片描述

ajax使用案例

const btn=document.querySelector('.xx');
//定义 点击事件 去触发 ajax 请求
btn.addEventListener('click',function(){
	//1.创建对象
	const xhr = new XMLHttpRequest();
	//可以设置响应结果的类型
	xhr.responseType = 'json' 
	//2.初始化
	xhr.open('GET','https://localhost:8080/login');
	//3.发送
	xhr.send();
	//4.处理响应结果(使用回调函数)
	xhr.onreadystatechange = function (){
		if(xhr.readyState === 4){
			//认定状态码200~300为成功时:
			if(xhr.status>=200 && xhr.status <300){
				//控制台输出响应体
				console.log(xhr.response)
			}else{
				console.log(xhr.status)
			}		
		}
	}
})

3. promise

是JS中进行异步编程的 新解决方案
旧方案:单纯使用回调函数。
语法:构造函数。可以实例化对象,封装异步操作,获取成功或失败的结果

promise的状态

返回promise对象时,实例对象的属性:promiseState
其值是:

  • pending 未决定的;
  • resolved / fulfilled 成功 ;
  • rejected 失败 ;

一个promise对象只能改变一次:不改变状态不执行then回调,改变状态后执行then回调.
状态改变只能是函数resolve、reject、throw,状态变化为:pending ->resolved 或者 pending ->rejected

promise对象的值

返回promise对象时,实例对象的另一个属性:promiseResult
其值是:保存着对象 成功/失败 的结果
函数resolve、reject 可以对该属性值进行操作,promiseResult保存对应函数的参数值

promise执行过程简述:

let p = new promise((resolve,reject)=>{
	// resolve、reject、throw 来改变状态
}).then(
	//回调函数
	(value)=>{},(reason)=>{})

1.指定回调->改变状态->执行回调
2.改变状态->指定回调->执行回调

promise优势:

指定回调函数方式更灵活
支持链式调用,可以解决回调地狱问题:

回调地狱:嵌套调用,外部回调函数异步执行的结果是嵌套回调执行的条件
缺点:不便于阅读,不便于异常处理

promise使用案例

//resolve 函数类型的数据 成功调用 将promise对象状态设置为成功
//reject 函数类型的数据  失败调用 将promise对象状态设置为失败
const p = new Promise((resolve,reject)=>{
	//以fs文件操作为例子
	fs.readFile('./content.txt',(err,data)=>{
		//失败时调用
		if(err) reject(err);
		//成功时调用
		resolve(data);
	})
	
});
p.then(
//状态为 成功 时调用
(data) => {},
//状态为 失败 时调用
(err) => {}).

封装上面ajax案例

const btn=document.querySelector('.xx');
//定义 点击事件 去触发 ajax 请求
btn.addEventListener('click',function(){
	const p = new Promise((resolve,reject)=>{
	//1.创建对象
	const xhr = new XMLHttpRequest();
	//2.初始化
	xhr.open('GET','https://localhost:8080/login');
	//3.发送
	xhr.send();
	//4.处理响应结果
	xhr.onreadystatechaenge = function (){
		if(xhr.readyState === 4){
			//认定状态码200~300为成功时:
			if(xhr.status>=200 && xhr.status <300){
				//控制台输出响应体
				resolve(xhr.response)//传递值
			}else{
				reject(xhr.status)//传递值
			}		
		}
	}
	})
	//调用then方法
	p.then(
	//状态为 成功 时调用,value是resolve传出来的值
	(value) => {console.log(value)},
	//状态为 失败 时调用,reason是reject传出来的值
	(reason) => {console.log(reason)});
})

封装ajax案例

function get(url){
	return new Promise((resolve,reject)=>{
			//1.创建对象
			const xhr = new XMLHttpRequest();
			//2.初始化
			xhr.open('GET',url);
			//3.发送
			xhr.send();
			//4.处理响应结果
			xhr.onreadystatechaenge = function (){
				if(xhr.readyState === 4){
					//认定状态码200~300为成功时:
					if(xhr.status>=200 && xhr.status <300){
						//控制台输出响应体
						resolve(xhr.response)
					}else{
						reject(xhr.status)
					}		
				}
			}
		})
	//发送请求
	get('https://localhost:8080/login')
	.then(
	//状态为 成功 时调用
	(value) => {console.log(value)},
	//状态为 失败 时调用
	(reason) => {console.log(reason)});
}

4. 其他有关promise

async、async

async 一般用于修饰返回promise对象的函数
await 修饰promise 对象能直接拿到resolve的值

Promise的函数方法

属于函数对象不属于实例对象,即直接使用:Promise.方法名(参数)

(1)Promise.resolve方法(value)=>{}
参数value:成功数据或者promise对象
返回一个成功、失败的promise对象

(2)Promise.reject方法 (reason)=>{}
参数reason:失败的原因
返回一个失败的promise对象

(3)Promise.all方法 (promise)=>{}
参数promise:包含n个promise数组
返回一个新的promise对象,所有成功即成功

(4)Promise.race方法 (promise)=>{}
参数promise:包含n个promise数组
返回一个新的promise对象,第一个完成的状态是最终状态

let p1 = new promise((resolve,reject)=>{
	resolve('OK1') //成功
})
let p2 = Promise.resolve('OK2') //成功
let p3 = Promise.reject('error3') //失败
let p4 = Promise.all([p1,p2,p3]) //失败
let p4 = Promise.race([p1,p2,p3]) //成功

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 18:55:53  更:2022-06-29 18:56:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:37:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码