加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Angular2 之 Promise vs Observable

发布时间:2020-12-17 09:40:15 所属栏目:安全 来源:网络整理
导读:如果看成状态机 Promise 具有 3 个状态:pending、resolved、rejected(如果 Cancelable Promise 正式通过,那么还会增加一个状态)。 Observable 有 N + 3 个状态:idle、pending、resolved_0、resolved_1 … resolved_N、completed 和 error。 总结:相比

如果看成状态机

  • Promise 具有 3 个状态:pending、resolved、rejected(如果 Cancelable Promise 正式通过,那么还会增加一个状态)。
  • Observable 有 N + 3 个状态:idle、pending、resolved_0、resolved_1 … resolved_N、completed 和 error。

    总结:相比于 Promise 这个有限状态机而言,Observable 既可能是有限状态机,也可能是无限状态机(N 为无穷)。

调用情况

  • Observable 还具有可订阅性,对于 Cold Observable 而言,只有订阅后才开始起作用
  • Promise 一经产生便开始起作用

    总结:在视频中有详细的介绍。

结束

  • 由于 Promise 仅有一个数据,故数据被获取即为 Promise 完成,仅需要一个状态。
  • Observable,由于可以有任意多个数据,因此需要一个额外的状态来表示完成,一经完成后便不能再产生数据。

运算符

  • Promise ,由于有且只有一个数据,所以无需复杂的操作,仅需要一个简单的变换(返回值)或者组合(返回另一个 Promise)功能即可,甚至还可以把组合变换与使用统一为一个操作,也就是我们的 .then。
  • Observable,由于可以有任意多个数据,为了使用上的方便,提供了很多运算符,用来简化用户代码(可以参考 Array)。

    • 对于变换,(最简单的方式)需要使用 .map 方法,用来把 Observable 中的某个元素转换成另一种形式。
    • 对于组合,(最简单的方式)需要使用 .mergeMap 方法,用来把两个 Observable 整合为一个 Observable;
    • 对于使用,我们需要使用 .subscribe 方法,用来通知 Observer 我们需要它开始工作。
  • 当然还可能有另一类运算符,比如 .toPromise 等,这些并不返回 Observable 的方法其实本身并不是一个运算符,仅仅是对 Observable 的原型扩展。

参考文档:

  • 如何理解 RxJS?
  • 视频

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读