前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Angular2 之 Promise vs Observable

Angular2 之 Promise vs Observable

作者头像
贺贺V5
发布2018-08-21 12:04:22
5600
发布2018-08-21 12:04:22
举报

如果看成状态机

  • 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 的原型扩展。

参考文档:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.01.20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如果看成状态机
  • 调用情况
  • 结束
  • 运算符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档