2021.5.10 关于Promise (转自阮一峰)

概念

  • promise就是一个容器,里面保存着未来才会结束的事件的结果。(通常为异步操作的结果)
  • promise是一个对象,可以获取异步操作的消息。
  • promise对象是一个构造函数,用来生成promise实例。

特点

  • promise对象的状态不受外界影响。三种状态: pending(进行中),fulfilled(已成功),rejected(已失败)。只有异步操作的结果能决定当前状态。其他操作都无法改变状态。
  • 一旦状态改变,就不会再变,任何时候都可以得到这个结果。promise状态的改变只有两种可能:从进行中变成已成功;从进行中变成已失败。 变完就会保持结果,称为resolved(已定型)。 改变发生之后再对promise对象添加回调函数,也能立即得到这个结果。(而事件(Event),如果你错过它,再去监听,是得不到结果的。)

优点

  • promise对象将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数(回调地狱)
  • promise对象提供统一的api,使控制异步操作更加容易。

缺点

  • 无法取消promise。一旦新建它就立即执行,无法中途取消。
  • 如果不设置回调函数,promise内部抛出的错误,不会反应到外部。
  • 当处于进行状态,不知道是进行到那一状态(刚开始还是即将完成)

基本用法

const promise = new Promise((resolve, reject) => {
  if (/*异步操作成功*/) {
    resolve(value)
  } else {
    reject(error)
  }
})
  • promise构造函数,接收一个函数作为参数。
  • 该函数的两个参数resolve和reject是两个函数,由JavaScript引擎提供,不用自己部署。
  • resolve 函数的作用是,将Promise 对象的状态从“未完成”变为“成功”(即从 pending 变为 resolved),在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
  • reject 函数的作用是,将Promise 对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去。
  • Promise实例生成以后,可以用then方法分别指定resolved状态和rejected状态的回调函数。
Promise.then(function(value) {
    // success
}, function(error) {
    // failure
})

then方法可以接受两个回调函数作为参数。第一个回调函数是Promise 对象的状态变为resolved时调用,第二个回调函数是Promise 对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise 对象传出的值作为参数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值