Promise
Promise 是面试的高频考点,了解原理,无论怎么问都难不到你,今天我们来聊一聊它
我们先来了解一下什么是Promise
一、Promise是异步编程的一种解决方案
二、Promise拥有的三种状态
<script>
// promise 系统预定好的
// 三种状态
/* 成功:fulfilled (resolved)
* 失败:rejected
* 等待:pending
*/
// pending
let res = new Promise((resolve,reject)=>{
})
console.log(res)
// fulfilled
let res1 = new Promise((resolve,reject)=>{
resolve('resolve')
})
console.log(res1)
// rejected
let res2 = new Promise((resolve,reject)=>{
reject('rejected')
})
console.log(res2)
</script>
三、Promise的状态不收外界影响,状态只能从pending ===> fulfilled 或者 pending ===> rejected 一旦变化状态不可逆
四、Promise的then
then 接收 2个参数 onResolved onRejected
then((res)=>{},(err)=>{})
then 3种返还值 =>返回的是promise 可以继续用then => 链式操作
五、Promise方法
Promise.resolve() 返还一个fulfilled状态的promise
Promise.reject() 返还一个rejected状态的promise
Promise.all() 一次性执行promise 结果放在数组中[],要求所有结果都是成功的后才会返回结果
Promise.race() 返还最快的promise结果
Promise.catch()
Promise.finally() 无论promise最后的状态如何都会执行
了解完Promise,我们自己实现一个简版的Promise
做一步测一步能保证我们的程序准确稳定的运行
第一步、实现promise的三种状态
MyPromise.js 实现自己的MyPromise类
class MyPromise {
constructor(handle){
this.status = 'pending';
this.value = undefined ;
// 只能通过bind 绑定this 不能用 call apply
// 原因:这个函数的执行位置不在这,在自己的js逻辑执行
// 使用call apply会将函数执行
handle(this._resolve.bind(this),this._reject.bind(this))
}
_resolve