Promise与Class

本文深入浅出地讲解了Promise的基础概念,包括Promise实例化、then方法的使用、catch处理失败状态,并探讨了如何通过Class扩展Promise。重点介绍了回调函数中的不同返回值和错误处理策略。
摘要由CSDN通过智能技术生成

Promise

基础理解:

 // 实例化promise对象
    const p = new Promise((resolve,reject)=>{
      setTimeout(()=>{
        let data = [1,2]
        // 将promise状态改为成功
        // resolve(data)

        let err = '状态为失败'
        reject(err)
      },3000)
    })

    // 调用promise中then方法,成功的状态进入then的value回调中,失败状态进入reason回调中
    // result-then方法的返回结果也是一个Promise对象,对象状态由回调函数的执行结果决定
      // 1.如果回调函数中返回的结果是 非Promise对象,状态为成功,返回值为对象的成功值。
    const result = p.then(value=>{
      console.log(value,"成功状态执行");
      // 没有return 就返回undefined
      
      // 1.非promise类型
      // return 'sdf'

      // 2.是promise类型
      return new Promise((r,j)=>{
        setTimeout(()=>{
          r('ok')
        },2000)
        // j('error')
      })

      // 3.抛出错误
      // throw new Error('出错啦')
    },reason=>{
      console.error(reason,'失败状态执行');
    }).then((value)=>{
      console.log(value)
      return new Promise((r,j)=>{
        setTimeout(()=>{
          r('ok3')
        },500)
        // j('error')
      })
    }).then((res)=>{
      console.log(res)
    })

    p.catch((err)=>{
      console.log(err,'err')
    })

扩展:

Class

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中的 Promise 是一种异步编程的解决方案,它可以让我们更加方便地处理异步操作。而在 ES6 中,我们可以使用 class 来定义一个 Promise 对象,具体的实现可以参考以下代码: ``` class MyPromise { constructor(executor) { this.status = 'pending'; this.value = undefined; this.reason = undefined; const resolve = (value) => { if (this.status === 'pending') { this.status = 'fulfilled'; this.value = value; } }; const reject = (reason) => { if (this.status === 'pending') { this.status = 'rejected'; this.reason = reason; } }; try { executor(resolve, reject); } catch (error) { reject(error); } } then(onFulfilled, onRejected) { onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : (value) => value; onRejected = typeof onRejected === 'function' ? onRejected : (reason) => { throw reason; }; if (this.status === 'fulfilled') { return new MyPromise((resolve, reject) => { try { const x = onFulfilled(this.value); resolvePromise(x, resolve, reject); } catch (error) { reject(error); } }); } if (this.status === 'rejected') { return new MyPromise((resolve, reject) => { try { const x = onRejected(this.reason); resolvePromise(x, resolve, reject); } catch (error) { reject(error); } }); } if (this.status === 'pending') { return new MyPromise((resolve, reject) => { this.onFulfilledCallbacks.push(() => { try { const x = onFulfilled(this.value); resolvePromise(x, resolve, reject); } catch (error) { reject(error); } }); this.onRejectedCallbacks.push(() => { try { const x = onRejected(this.reason); resolvePromise(x, resolve, reject); } catch (error) { reject(error); } }); }); } } catch(onRejected) { return this.then(null, onRejected); } finally(onFinally) { return this.then( (value) => MyPromise.resolve(onFinally()).then(() => value), (reason) => MyPromise.resolve(onFinally()).then(() => { throw reason; }) ); } } function resolvePromise(x, resolve, reject) { if (x instanceof MyPromise) { x.then(resolve, reject); } else { resolve(x); } } ``` 以上就是一个简单的 Promise 实现,其中包含了 Promise 的基本功能,如 then、catch 和 finally 方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值