请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

new 一个myPromise并resolve()后,执行.then()返回的是undefined,老师可以帮忙看下哪里有问题吗

class MyPromise{
  state = 'pending'  //pending,fulfilled,rejected
  value = ''  //resolved的值
  error = '' //reject的值
  handleResolvedFuns = []
  handleRejectFuns = []
  constructor(fn){
    const handleResolved = (val)=>{
      if(this.state === 'pending'){
        this.state='fulfilled'
        this.value = val
        this.handleResolvedFuns.forEach((fun)=>fun(this.value))
      }
    }
    const handleReject = (err)=>{
      if(this.state === 'pending'){
        this.state='rejected'
        this.value = err
        this.handleRejectFuns.forEach((fun)=>fun(this.value))
      }
    }
    try {
      fn(handleResolved,handleReject)
    } catch (error) {
      console.log(error)
    }
    
  }
  then(f1,f2){
    f1 = typeof f1 === 'function'?f1:(v)=>v;
    f2 = typeof f2 === 'function'?f2:(e)=>e;
    if(this.state === 'pending'){
      const p = new MyPromise((resolve,reject)=>{
        this.handleResolvedFuns.push(()=>{
          try {
            const newValue = f1(this.value)
            resolve(newValue)
            
          } catch (error) {
            reject(error)
          }
        })
        this.handleRejectFuns.push(()=>{
          try{
            const newError = f2(this.error)
            reject(newError)
          }catch (error){
            reject(error)
          }
        })
        
      })
      return p
      
      
    }
    if(this.state==='fullfilled'){
      const p1 =  new MyPromise((resolve,reject)=>{
        try {
          const newValue = f1(this.value);
          resolve(newValue)
        } catch (error) {
          reject(error)
        }
      })
      return p1
    }
    if(this.state==='rejected'){
      const p2 = new MyPromise((resolve,reject)=>{
        try{
          const newError = f2(this.error)
          resolve(newError)
        }catch(error){
          reject(error)
        }
      })
      return p2
    }

  }
  catch(fn){
    this.then(null,fn)
  }
}

正在回答 回答被采纳积分+3

1回答

双越 2023-02-20 17:36:06

new 一个myPromise并resolve()后,执行.then()返回的是undefined —— 你这个的测试代码,贴一下

0 回复 有任何疑惑可以回复我~
  • 提问者 小慕姐姐 #1
    const p1 = new MyPromise((resolve,reject)=>{
        resolve(100)
     }).then((result) => {
       console.log(result)
       
     })
     console.log(p1)
    回复 有任何疑惑可以回复我~ 2023-02-20 19:02:17
  • 双越 回复 提问者 小慕姐姐 #2
    你把 resolve(100) 用 setTimeout 包裹起来试试?
    回复 有任何疑惑可以回复我~ 2023-02-21 08:05:57
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信