手写Promise

1.promise是手写异步代码的另一种方式,主要用于解决回调嵌套问题
2.promise提供两个参数resolve(成功时调用的函数),reject(失败时调用的参数),它们是promise内部实现好的函数
3.promise有三种状态,pending 等待,fulfilled成功,rejected失败
4.resolve时,将promise的状态从pending改为fulfilled
5.reject时,将promise的状态从pending改为rejected
6.promise是一个类
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
class Promise {
    //立刻执行
    constructor(executor) {
        this.state = 'pending' // 初始化state为等待状态
        this.value = undefined  //记录成功的值
        this.reason = undefined // 记录失败的值
        // 只有状态为pending的时候才能被改变状态
        // 在new Promise的时候,可以同时调用多个函数,但是只会执行第一个
        let resolve = (value) => {
            if (this.state === 'pending') {
                this.state = 'fulfilled' // 更新状态
            }
            this.value = value ///记录成功信息
            // console.log('将状态改为成功,记录成功的信息')
        }
        let reject = (reason) => {
            if (this.state === 'pending') {
                this.state = 'rejected' // 更新状态
            }
            this.reason = reason //记录失败的信息
            // console.log('将状态改为失败,记录失败的信息')
        }
        //  如果执行executor报错,直接reject
        try {
            executor(resolve, reject)
        } catch {
            reject()
        }
    }
    then(onFulfilled, onRejected) {
        // 成功调用 onFulfilled  失败调用onRejected  根据state来进行区分
        if (this.state === 'fulfilled') {
            onFulfilled(this.value)
        }
        if (this.state === 'rejected') {
            onRejected(this.reason)
        }
    }
}
const p = new Promise((resolve, reject) => {
    resolve('成功的传值')
    // reject('失败的传值')
})
// 在类中,给原型加一个then方法
p.then(res => {
    console.log(res)
})

  

posted @   乐得逍遥  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示