flybirding10011 2021-07-15 23:10 采纳率: 51.9%
浏览 104
已结题

es6 promise原理是什么?

es6 promise原理是什么?
es6 promise实现可以简单写一写么?55

  • 写回答

4条回答 默认 最新

  • Alice_czy 2021-07-16 17:03
    关注

    // 三个常量⽤于表示状态
    const PENDING = 'pending'
    const RESOLVED = 'resolved'
    const REJECTED = 'rejected'
    function MyPromise(fn) {
    const that = this
    this.state = PENDING
    // value 变量⽤于保存 resolve 或者 reject 中传⼊的值
    this.value = null
    // ⽤于保存 then 中的回调,因为当执⾏完 Promise 时状态可能还是等待中,这时候应该把
    that.resolvedCallbacks = []
    that.rejectedCallbacks = []
    function resolve(value) {
    // ⾸先两个函数都得判断当前状态是否为等待中
    if(that.state === PENDING) {
    that.state = RESOLVED
    that.value = value
    // 遍历回调数组并执⾏
    that.resolvedCallbacks.map(cb=>cb(that.value))
    }
    }
    function reject(value) {
    if(that.state === PENDING) {
    that.state = REJECTED
    that.value = value
    that.rejectedCallbacks.map(cb=>cb(that.value))
    }
    }
    // 完成以上两个函数以后,我们就该实现如何执⾏ Promise 中传⼊的函数了
    try {
    fn(resolve,reject)
    }cach(e){
    reject(e)
    }
    }
    // 最后我们来实现较为复杂的 then 函数
    MyPromise.prototype.then = function(onFulfilled,onRejected){
    const that = this
    // 判断两个参数是否为函数类型,因为这两个参数是可选参数
    onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : v=>v
    onRejected = typeof onRejected === 'function' ? onRejected : e=>throw e
    // 当状态不是等待态时,就去执⾏相对应的函数。如果状态是等待态的话,就往回调函数中 push
    if(this.state === PENDING) {
    this.resolvedCallbacks.push(onFulfilled)
    this.rejectedCallbacks.push(onRejected)
    }
    if(this.state === RESOLVED) {
    onFulfilled(that.value)
    }
    if(this.state === REJECTED) {
    onRejected(that.value)
    }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 请采纳用户回复 8月23日
  • 修改了问题 7月29日
  • 展开全部

悬赏问题

  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题
  • ¥15 Python时间序列如何拟合疏系数模型