如果看成状态机
- Promise 具有 3 个状态:pending、resolved、rejected(如果 Cancelable Promise 正式通过,那么还会增加一个状态)。
Observable 有 N + 3 个状态:idle、pending、resolved_0、resolved_1 … resolved_N、completed 和 error。
总结:相比于 Promise 这个有限状态机而言,Observable 既可能是有限状态机,也可能是无限状态机(N 为无穷)。
调用情况
结束
- 由于 Promise 仅有一个数据,故数据被获取即为 Promise 完成,仅需要一个状态。
- Observable,由于可以有任意多个数据,因此需要一个额外的状态来表示完成,一经完成后便不能再产生数据。
运算符
- Promise ,由于有且只有一个数据,所以无需复杂的操作,仅需要一个简单的变换(返回值)或者组合(返回另一个 Promise)功能即可,甚至还可以把组合变换与使用统一为一个操作,也就是我们的 .then。
Observable,由于可以有任意多个数据,为了使用上的方便,提供了很多运算符,用来简化用户代码(可以参考 Array)。
当然还可能有另一类运算符,比如 .toPromise 等,这些并不返回 Observable 的方法其实本身并不是一个运算符,仅仅是对 Observable 的原型扩展。
参考文档: