美文网首页
实现promise 代码

实现promise 代码

作者: aaagu1234 | 来源:发表于2021-10-27 14:36 被阅读0次
const STATUS = {
    PENDING: 'pending',
    FULFILLED: 'fulFilled',
    REJECTED: 'rejected'
}

class MyPromise {
    constructor(executor) {
        this.status = STATUS.PENDING    // 状态值
        this.value = undefined          // 成功返回值
        this.reason = undefined         // 失败返回值
        this.onFulFilledCallbacks = []  // 成功回调执行队列----up
        this.onRejectedCallbacks = []   // 失败回调执行队列----up

        // 成功
        const resolve = (val) => {
            // PENDING用来屏蔽的,resolve和reject只能调用一个,不能同时调用
            if (this.status === STATUS.PENDING) {
                this.status = STATUS.FULFILLED
                this.value = val
                this.onFulFilledCallbacks.forEach(fn => fn())   // ----up
            }
        }
        // 是失败
        const reject = (reason) => {
            if (this.status === STATUS.PENDING) {
                this.status = STATUS.REJECTED
                this.reason = reason
                this.onRejectedCallbacks.forEach(fn => fn())   // ----up
            }
        }

        try {
            executor(resolve, reject)
        } catch (e) {
            reject(e)
        }
    }

    then(onFullFilled, onRejected) {
        // 同步调用判断
        if (this.status === STATUS.FULFILLED) {
            onFullFilled(this.value)
        }
        if (this.status === STATUS.REJECTED) {
            onRejected(this.reason)
        }
        // 异步调用判断 ----up
        if (this.status === STATUS.PENDING) {
            this.onFulFilledCallbacks.push(() => {
                onFullFilled(this.value)
            })
            this.onRejectedCallbacks.push(() => {
                onRejected(this.reason)
            })
        }
    }
}

// const p = new MyPromise((resolve, reject) => {
//     // resolve('success')   // 走了成功就不会走失败了
//     // throw new Error('失败') // 失败了就走resolve
//     // reject('failed')       // 走了失败就不会走成功
//     resolve('成功!')
// })
// p.then((res) => {
//     console.log(res)
// }, (err) => {
//     console.log(err)
// })

const p = new MyPromise((resolve, reject) => {
    setTimeout(function() {
        resolve('success')
    }, 1000)
})
p.then((res) => {
    console.log(res)
}, (err) => {
    console.log(err)
})

参考: https://blog.csdn.net/qq_37820580/article/details/110528932

相关文章

  • JavaScript----JS循环中使用async/await

    async/await是Promise的语法糖 Promise实现代码: async/await实现上面代码: P...

  • async/await 应用手札

    [注:以下代码都在支持 Promise 的 Node 环境中实现] 1 promise 释义 promise 是抽...

  • 实现promise 代码

    参考: https://blog.csdn.net/qq_37820580/article/details/110...

  • Promise的构成原理

    自己用类模拟实现 promise看代码吧

  • Promise的简易实现(1)

    Promise的简易实现(1) 1.Promise的日常使用 举个栗子: 2.做出Promise大致框架 代码的大...

  • 手写Promise的实现和心得

    实现的逻辑和说明 上述代码基本上实现了所有的Promise/A+规范,实现了promise的静态resolve和r...

  • Promise 源代码解析

    本文从 Promise 的源代码入手,分析Promise是如何实现的。并不涉及Promise如何使用.适用于已经熟...

  • 实现 Promise

    实现 Promise 此代码基本源于大佬在掘金上发的文章Promise实现原理(附源码), 此文写得相当详细, 非...

  • 手写promise

    上一篇文章介绍了promise的概念作用及API,这里我们就手鲁代码实现promise Promise的几个关键问...

  • 实现PromiseA+

    代码实现 promiseA+规范参考 https://promisesaplus.com/ Promise测试 脚...

网友评论

      本文标题:实现promise 代码

      本文链接:https://www.haomeiwen.com/subject/alhpaltx.html