资讯专栏INFORMATION COLUMN

RxJS 核心概念Observer & Subscription

tinysun1234 / 887人阅读

摘要:在中,是一个由回调函数组成的对象,键名分别为和,以此接受推送的不同类型的通知,下面的代码段是的一个示例调用逻辑,只需在订阅后将传入在中,是可选的。当然你也可以将和的回调函数分别传入什么是是一个代表可以终止资源的对象,表示一个的执行过程。

Observer(观察者)

什么是Observer? Observer(观察者)是Observable(可观察对象)推送数据的消费者。在RxJS中,Observer是一个由回调函数组成的对象,键名分别为nexterrorcomplete,以此接受Observable推送的不同类型的通知,下面的代码段是Observer的一个示例:

var observer = {
  next: x => console.log("Observer got a next value: " + x),
  error: err => console.error("Observer got an error: " + err),
  complete: () => console.log("Observer got a complete notification"),
};

调用Observer逻辑,只需在subscribe(订阅)Observable后将Observer传入:

observable.subscribe(observer);

在RxJS中,Observer是可选的。在nexterrorcomplete处理逻辑部分缺失的情况下,Observable仍然能正常运行,为包含的特定通知类型的处理逻辑会被自动忽略。

下面例子中Observer并不包含complete类型通知的处理逻辑:

var observer = {
  next: x => console.log("Observer got a next value: " + x),
  error: err => console.error("Observer got an error: " + err),
};

在订阅Observable时,你甚至可以把回调函数作为参数传入,而不是传入完整的Observer对象:

observable.subscribe(x => console.log("Observer got a next value: " + x));

在RxJS内部,调用observable.subscribe时,它会创建一个只有next处理逻辑的Observer。当然你也可以将nexterrorcomplete的回调函数分别传入:

observable.subscribe(
  x => console.log("Observer got a next value: " + x),
  err => console.error("Observer got an error: " + err),
  () => console.log("Observer got a complete notification")
);
Subscription

什么是Subscription? Subscription是一个代表可以终止资源的对象,表示一个Observable的执行过程。Subscription有一个重要的方法:unsubscribe。这个方法不需要传入参数,调用后便会终止相应的资源。在RxJS以前的版本中,Subscription被称为"Disposable"

var observable = Rx.Observable.interval(1000);
var subscription = observable.subscribe(x => console.log(x));

subscription.unsubscribe(); 

Subscription能够通过unsubscribe() 函数终止Observable的执行过程并释放相应资源。

Subscription可以嵌套使用:你可以调用一个Subscription的unsubscribe() 方法来取消一系列嵌套的Subscription。通过add方法,便可以实现Subscription的嵌套:

var observable1 = Rx.Observable.interval(400);
var observable2 = Rx.Observable.interval(300);

var subscription = observable1.subscribe(x => console.log("first: " + x));
var childSubscription = observable2.subscribe(x => console.log("second: " + x));

subscription.add(childSubscription);

setTimeout(() => {
  // 终止所有嵌套的Subscription
  subscription.unsubscribe();
}, 1000);

执行后,控制台会输出一下结果:

second: 0
first: 0
second: 1
first: 1
second: 2

此外,Subscription提供了remove(otherSubscription)方法,可以删除一个Subscription嵌套的子Subscription。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79366.html

相关文章

  • RxJS 核心概念之Subject

    摘要:返回的对象同时是类型的,拥有方法。由于调用后,开始执行,因此,会返回一个供调用者来终止执行。是的一个衍生类,具有最新的值的概念。举一个形象的例子,表示一个人的生日,而则表示一个人的岁数。 什么是Subject? 在RxJS中,Subject是一类特殊的Observable,它可以向多个Observer多路推送数值。普通的Observable并不具备多路推送的能力(每一个Observer...

    weij 评论0 收藏0
  • Rxjs 核心概念

    摘要:仿宋可以把想像成一个可以发射事件的库。在中用来处理异步事件的核心概念包括代表了未来可能会产生的一系列的值或事件的集合回调函数的集合,它知道如何去处理上产生的值或者事件,当然也包括异常。 又一年要过去了,回顾2017,rxjs始终是我在项目里使用最频繁的库,在我看来,它是一个非常优秀的数据处理工具。年初的时候就计划写点什么,碍于目前公司的项目实在抽不出时间,这一拖就到了年底。临近新年,总...

    Youngdze 评论0 收藏0
  • RxJs 核心概念之Observable

    摘要:函数调用后同步计算并返回单一值生成器函数遍历器遍历过程中同步计算并返回个到无穷多个值异步执行中返回或者不返回单一值同步或者异步计算并返回个到无穷多个值是函数概念的拓展既不像,也不像是。如果不调用函数,就不会执行如果如果不订阅,也不会执行。 Observable(可观察对象)是基于推送(Push)运行时执行(lazy)的多值集合。下方表格对Observable进行了定位(为解决基于推送的...

    forrest23 评论0 收藏0
  • [译]RxJS文档03——剖析Observable

    摘要:通过执行和可以向订阅者推送不同的通知。之后,执行过程可能被处理掉。当调用并得到观察者时,在中传入的函数将会被执行。每次执行都会触发一个单独针对当前的运行逻辑。通知不发出任何值,表示流的结束。 原文:http://reactivex.io/rxjs/manu... Rx.Observalbe.create()或者创建操作符,可以 创建(created) Observable流。Obser...

    netScorpion 评论0 收藏0
  • 通俗的方式理解RxJS

    摘要:到底是什么先上代码输出这里可以把想象成一个函数,这意味着你每次调用都会导致传入里的回调函数重新执行一次调用的方式为相当于。接收函数返回值的方式也从改为通过传入回调函数的方式获取。具体看代码运行结果如上的第一个回调函数里的结构是推荐的结构。 通俗的方式理解Rx.js 序言 今早看民工叔的文章的时候, 发现对Rxjs所知甚少, 于是去官方看了下教程, 整理出一些东西, 写成此文。Rxjs据...

    jzzlee 评论0 收藏0

发表评论

0条评论

tinysun1234

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<