1.promise 存在的作用:
1.1 解决回调地狱
1.1.1 什么是回调地狱:
异步回调层层嵌套,说人话,就是在一个异步的操作里面再嵌套一个异步
为什么会出现异步嵌套?
因为想让异步的操作能按顺序执行,
异步的特点: 无序性
所有能实现多个异步有序执行,最简单的办法就是嵌套
-----------------------------------------------------------------这就产生了回调地狱
2.promise 是什么
promise的实质是一个构造函数,比如Array就是一个构造函数----简单使用体验一下
// promise创建实例
// 这里以nodeJS读取文件这个异步操作为例
// 如果没有nodeJS基础的读者可以使用ajax作为异步操作来进行学习promise
const fs=require("fs");
let p1=Promise((resolve,reject)=>{
// 这里面写异步操作
// 这里得提前建立好./data/data.txt文件
fs.readFile('./data/data.txt','utf8',(err,data)=>{
if(!err){
// 如果你的回调函数没有报错的话,就是执行成功
// 在promise实例化里面---假如成功就执行resolve()方法
resolve(data);
// resolve 在英语里面解释为解决
}else{
//失败
// 在promise实例化里面---假如失败就执行reject()方法
reject(err);
// reject 在英语里面解释为拒绝
}
});
});
// 实例化promise对象后就可以调用then方法
// then方法是写在promise 的原理里面的
// 写在promise 构造函数原型里面的方法,作为promise的实例化的对象也是可以访问原理里面的方法
// 如果有读者对原型访问不太理解的话,可以去百度找关键字(原型链)
p1.then(data=>{
console.log(data);
},err=>{
console.log(err);
})
// 下面是使用ajax作为异步操作的例子
// 使用 ajax请提前引用jq
let p1 = new Promise((resolve,reject)=>{
//异步操作
$.ajax({
url:'这里写入自己的接口',
type:'get',
dataType:'json',
data:'传参',
success: function(backData){
if(backDatta.code==200){
// 一般请求成功之后,后端返回的状态码是200
// 视具体情况而定
resolve(backData);
}else{
// 如果是失败
resolve(backData);
}
}
});
});
p1.then(data=>{
// 成功之后操作-----对应resolve(data)
console.log(data);
},err=>{
// 失败之后操作----对应reject
console.log(err);
})
3.promise 的工作原理介绍
3.1 promise对象三种工作状态
类似我们去做考英语四级:只有三种状态
备考中(进行中)
成功过四级(已成功---resolve)
考四级失败(已失败---reject)
3.2 promise实例化对象一旦创建,里面的异步操作就会立即执行,然后就会立即执行resolve或者reject
因为异步返回的结果也只能是成功或者失败,所以二者选一,
3.3 promise 控制的异步操作的顺序本质
a.promise不能改变异步的无序性,异步的无序也是无法修改的
promise本质是操作异步的结果来操作异步的顺序,说人话,就是上一个异步没有执行完毕就不执行下一个异步