Promise 与 Rx

Promise这个概念在JS开发者里面可谓是深入人心,主要用它来避免callback hell。

1. Promise顾名思义,提供的是一个允诺,这个允诺就是在调用then之后,它会在未来某个阶段把异步函数执行的结果传给then      里的函数

    Rx不是允诺,它本质上还是由订阅发布模式印出来的,核心思想就是数据响应式。

    (源头)数据产生者——一系列的变换/过滤/合并(操作)——数据消费者使用,数据消费者何时使用,完全取决于数据流何时能流下来

2.Promise需要调用then或catch才能够执行,catch是then的另一种形式,调用then或者catch之后返回一个新的Promise,新的     Promise又可以被调用,因此可以做成无限的then链。

  Rx数据是否流出不取决于subscribe,一个observable在未被订阅的时候也可以流出数据,在之后被订阅后先前流出的数据无法被消费者查知的,所以Rx引入了一个lazy模式,允许数据缓存着知道被订阅,但数据是否流出并不依赖subscribe。

observable被订阅后并不是返回新的observable,而是返回一个subsciber,这样可以取消订阅,但是也导致了链式断裂,所以不能像Promise一样组成无线then链。

3.Promise数据是一次性流出的,因为Promise内部维持着状态,初始化的pending,转成resolved或者rejected之后,状态就不可逆转了。

举例说promise().then(A).then(B).then(C).catch(D),数据是顺着链以此传播,但是只有一次,数据从A到B之后,A这个promise的状态发生了改变,从pedding转成了resolved,那么它就不可能再产生内容了,所以这个promise已经不是活动性的了。

而Rx则不同,我们从Rx的接口就可以知道,它有onNext,onComplete和onError,onNext可以响应无数次,这也是符合我们对数据响应式的理解,数据在源头被隔三差五的发出,只要源头认为没有流尽(onComplete)或者出了问题(onError),那么数据就可以不断的流到响应者那边。

举例来说,我们响应一个按钮的点击事件,那么我们可以把这个事件抽象为一个数据流,只要按钮还在,那么我们就认为它是可以产生数据的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值