一、什么是promise? 解决那些问题?
1、回调地狱 代码不好维护,错误处理非常麻烦,不能统一处理错误
2、多个请求并发,基于回调。(之前写的并发读取文件,自己定义定时器)
二、 promise 是一个类,类用的时候,只需要new
1、new Promise() 是需要传递一个执行器函数,exector 这个函数默认就会执行 【立即执行】
2、每个promise() 都有三个状态 pending 等待态,fullfiled, 成功态,rejected 失败态
3、默认创建一个promise 是等待态,默认提供给你两个函数,resolve让promise变成成功态,rejected让promise变成失败态。
4、每个promise 的实例都具备一个then方法,then方法中传递两个参数, (1)成功的回调 (2)失败的回调
5、如何让一个promise 变成失败态,reject() 可以抛出一个错误
6、如果多次调用成功或者失败,只会执行第一次。 一旦状态变化,就不能再变成成功,或者失败。
7、自己实现基本的promise。语法commonjs 规范 ,可以在一个模块中,导出一个变量,另一个模块来引用
let promise=new Promise((resolve,reject)=>{
//promise中添加定时器
setTimeout(()=>{ //异步的逻辑的时候,先把成功、失败存储起来,等会一起调用。
//throw new Error('我失败了');
resolve('success'); // 此时如果调用了resolve 就让刚才存储的成功的回调函数去执行。
//reject('fail');
},1000)
})
// 1、同一个promise实例,可以then多次
// 2、核心就是发布订阅模式
promise.then((success)=>{
console.log('success',success);
},(err)=>{
console.log(err,'fail');
});
promise.then((success)=>{ //如果调用then的时候,没有成功,也没有失败,可以先保存和失败的回调。
console.log('success',success);
},(err)=>{
console.log(err,'fail');
});
// then 是一个订阅 ,resolve或者reject是个发布