Angular2 之 Promise vs Observable

如果看成状态机

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

参考文档:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 6,406评论 0 12
  • Promise的含义:   Promise是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和...
    呼呼哥阅读 6,533评论 0 16
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 8,664评论 0 19
  • 人生重在学习,即使某一天我离开学校,一无所有,我依然还可以学习,技多不压身
    轻轻繁年阅读 1,580评论 0 0
  • -1- 去年冬天圣诞节的晚上,密谋了半个月之后,我向女神苏晗告白了。 站在九十九盒费列罗摆出的爱心中央,怀里抱着九...
    王大可子阅读 4,690评论 17 13

友情链接更多精彩内容