成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

RxJS 核心概念Observer & Subscription

tinysun1234 / 1047人閱讀

摘要:在中,是一個(gè)由回調(diào)函數(shù)組成的對象,鍵名分別為和,以此接受推送的不同類型的通知,下面的代碼段是的一個(gè)示例調(diào)用邏輯,只需在訂閱后將傳入在中,是可選的。當(dāng)然你也可以將和的回調(diào)函數(shù)分別傳入什么是是一個(gè)代表可以終止資源的對象,表示一個(gè)的執(zhí)行過程。

Observer(觀察者)

什么是Observer? Observer(觀察者)是Observable(可觀察對象)推送數(shù)據(jù)的消費(fèi)者。在RxJS中,Observer是一個(gè)由回調(diào)函數(shù)組成的對象,鍵名分別為next、errorcomplete,以此接受Observable推送的不同類型的通知,下面的代碼段是Observer的一個(gè)示例:

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"),
};

調(diào)用Observer邏輯,只需在subscribe(訂閱)Observable后將Observer傳入:

observable.subscribe(observer);

在RxJS中,Observer是可選的。在next、errorcomplete處理邏輯部分缺失的情況下,Observable仍然能正常運(yùn)行,為包含的特定通知類型的處理邏輯會被自動(dòng)忽略。

下面例子中Observer并不包含complete類型通知的處理邏輯:

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

在訂閱Observable時(shí),你甚至可以把回調(diào)函數(shù)作為參數(shù)傳入,而不是傳入完整的Observer對象:

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

在RxJS內(nèi)部,調(diào)用observable.subscribe時(shí),它會創(chuàng)建一個(gè)只有next處理邏輯的Observer。當(dāng)然你也可以將next、errorcomplete的回調(diào)函數(shù)分別傳入:

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是一個(gè)代表可以終止資源的對象,表示一個(gè)Observable的執(zhí)行過程。Subscription有一個(gè)重要的方法:unsubscribe。這個(gè)方法不需要傳入?yún)?shù),調(diào)用后便會終止相應(yīng)的資源。在RxJS以前的版本中,Subscription被稱為"Disposable"

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

subscription.unsubscribe(); 

Subscription能夠通過unsubscribe() 函數(shù)終止Observable的執(zhí)行過程并釋放相應(yīng)資源。

Subscription可以嵌套使用:你可以調(diào)用一個(gè)Subscription的unsubscribe() 方法來取消一系列嵌套的Subscription。通過add方法,便可以實(shí)現(xiàn)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);

執(zhí)行后,控制臺會輸出一下結(jié)果:

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

此外,Subscription提供了remove(otherSubscription)方法,可以刪除一個(gè)Subscription嵌套的子Subscription。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/79366.html

相關(guān)文章

  • RxJS 核心概念之Subject

    摘要:返回的對象同時(shí)是類型的,擁有方法。由于調(diào)用后,開始執(zhí)行,因此,會返回一個(gè)供調(diào)用者來終止執(zhí)行。是的一個(gè)衍生類,具有最新的值的概念。舉一個(gè)形象的例子,表示一個(gè)人的生日,而則表示一個(gè)人的歲數(shù)。 什么是Subject? 在RxJS中,Subject是一類特殊的Observable,它可以向多個(gè)Observer多路推送數(shù)值。普通的Observable并不具備多路推送的能力(每一個(gè)Observer...

    weij 評論0 收藏0
  • Rxjs 核心概念

    摘要:仿宋可以把想像成一個(gè)可以發(fā)射事件的庫。在中用來處理異步事件的核心概念包括代表了未來可能會產(chǎn)生的一系列的值或事件的集合回調(diào)函數(shù)的集合,它知道如何去處理上產(chǎn)生的值或者事件,當(dāng)然也包括異常。 又一年要過去了,回顧2017,rxjs始終是我在項(xiàng)目里使用最頻繁的庫,在我看來,它是一個(gè)非常優(yōu)秀的數(shù)據(jù)處理工具。年初的時(shí)候就計(jì)劃寫點(diǎn)什么,礙于目前公司的項(xiàng)目實(shí)在抽不出時(shí)間,這一拖就到了年底。臨近新年,總...

    Youngdze 評論0 收藏0
  • RxJs 核心概念之Observable

    摘要:函數(shù)調(diào)用后同步計(jì)算并返回單一值生成器函數(shù)遍歷器遍歷過程中同步計(jì)算并返回個(gè)到無窮多個(gè)值異步執(zhí)行中返回或者不返回單一值同步或者異步計(jì)算并返回個(gè)到無窮多個(gè)值是函數(shù)概念的拓展既不像,也不像是。如果不調(diào)用函數(shù),就不會執(zhí)行如果如果不訂閱,也不會執(zhí)行。 Observable(可觀察對象)是基于推送(Push)運(yùn)行時(shí)執(zhí)行(lazy)的多值集合。下方表格對Observable進(jìn)行了定位(為解決基于推送的...

    forrest23 評論0 收藏0
  • [譯]RxJS文檔03——剖析Observable

    摘要:通過執(zhí)行和可以向訂閱者推送不同的通知。之后,執(zhí)行過程可能被處理掉。當(dāng)調(diào)用并得到觀察者時(shí),在中傳入的函數(shù)將會被執(zhí)行。每次執(zhí)行都會觸發(fā)一個(gè)單獨(dú)針對當(dāng)前的運(yùn)行邏輯。通知不發(fā)出任何值,表示流的結(jié)束。 原文:http://reactivex.io/rxjs/manu... Rx.Observalbe.create()或者創(chuàng)建操作符,可以 創(chuàng)建(created) Observable流。Obser...

    netScorpion 評論0 收藏0
  • 通俗的方式理解RxJS

    摘要:到底是什么先上代碼輸出這里可以把想象成一個(gè)函數(shù),這意味著你每次調(diào)用都會導(dǎo)致傳入里的回調(diào)函數(shù)重新執(zhí)行一次調(diào)用的方式為相當(dāng)于。接收函數(shù)返回值的方式也從改為通過傳入回調(diào)函數(shù)的方式獲取。具體看代碼運(yùn)行結(jié)果如上的第一個(gè)回調(diào)函數(shù)里的結(jié)構(gòu)是推薦的結(jié)構(gòu)。 通俗的方式理解Rx.js 序言 今早看民工叔的文章的時(shí)候, 發(fā)現(xiàn)對Rxjs所知甚少, 于是去官方看了下教程, 整理出一些東西, 寫成此文。Rxjs據(jù)...

    jzzlee 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<