摘要:在中,是一個(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、error 和 complete,以此接受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、error 和 complete處理邏輯部分缺失的情況下,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、error 和 complete的回調(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
摘要:返回的對象同時(shí)是類型的,擁有方法。由于調(diào)用后,開始執(zhí)行,因此,會返回一個(gè)供調(diào)用者來終止執(zhí)行。是的一個(gè)衍生類,具有最新的值的概念。舉一個(gè)形象的例子,表示一個(gè)人的生日,而則表示一個(gè)人的歲數(shù)。 什么是Subject? 在RxJS中,Subject是一類特殊的Observable,它可以向多個(gè)Observer多路推送數(shù)值。普通的Observable并不具備多路推送的能力(每一個(gè)Observer...
摘要:仿宋可以把想像成一個(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í)間,這一拖就到了年底。臨近新年,總...
摘要:函數(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)行了定位(為解決基于推送的...
摘要:通過執(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...
摘要:到底是什么先上代碼輸出這里可以把想象成一個(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ù)...
閱讀 2078·2023-04-25 17:48
閱讀 3590·2021-09-22 15:37
閱讀 2941·2021-09-22 15:36
閱讀 6008·2021-09-22 15:06
閱讀 1644·2019-08-30 15:53
閱讀 1431·2019-08-30 15:52
閱讀 716·2019-08-30 13:48
閱讀 1126·2019-08-30 12:44