美文网首页前端框架 - Frontend Framework
Angular2 之 Promise vs Observable

Angular2 之 Promise vs Observable

作者: 贺贺v5 | 来源:发表于2017-01-20 18:30 被阅读1022次

    如果看成状态机

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

    参考文档:

    相关文章

      网友评论

        本文标题:Angular2 之 Promise vs Observable

        本文链接:https://www.haomeiwen.com/subject/uekevttx.html