摘要:在中,是一個由回調(diào)函數(shù)組成的對象,鍵名分別為和,以此接受推送的不同類型的通知,下面的代碼段是的一個示例調(diào)用邏輯,只需在訂閱后將傳入在中,是可選的。當(dāng)然你也可以將和的回調(diào)函數(shù)分別傳入什么是是一個代表可以終止資源的對象,表示一個的執(zhí)行過程。
Observer(觀察者)
什么是Observer? Observer(觀察者)是Observable(可觀察對象)推送數(shù)據(jù)的消費者。在RxJS中,Observer是一個由回調(diào)函數(shù)組成的對象,鍵名分別為next、error 和 complete,以此接受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"), };
調(diào)用Observer邏輯,只需在subscribe(訂閱)Observable后將Observer傳入:
observable.subscribe(observer);
在RxJS中,Observer是可選的。在next、error 和 complete處理邏輯部分缺失的情況下,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時,你甚至可以把回調(diào)函數(shù)作為參數(shù)傳入,而不是傳入完整的Observer對象:
observable.subscribe(x => console.log("Observer got a next value: " + x));
在RxJS內(nèi)部,調(diào)用observable.subscribe時,它會創(chuàng)建一個只有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是一個代表可以終止資源的對象,表示一個Observable的執(zhí)行過程。Subscription有一個重要的方法:unsubscribe。這個方法不需要傳入?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)用一個Subscription的unsubscribe() 方法來取消一系列嵌套的Subscription。通過add方法,便可以實現(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)方法,可以刪除一個Subscription嵌套的子Subscription。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/79366.html
摘要:返回的對象同時是類型的,擁有方法。由于調(diào)用后,開始執(zhí)行,因此,會返回一個供調(diào)用者來終止執(zhí)行。是的一個衍生類,具有最新的值的概念。舉一個形象的例子,表示一個人的生日,而則表示一個人的歲數(shù)。 什么是Subject? 在RxJS中,Subject是一類特殊的Observable,它可以向多個Observer多路推送數(shù)值。普通的Observable并不具備多路推送的能力(每一個Observer...
摘要:函數(shù)調(diào)用后同步計算并返回單一值生成器函數(shù)遍歷器遍歷過程中同步計算并返回個到無窮多個值異步執(zhí)行中返回或者不返回單一值同步或者異步計算并返回個到無窮多個值是函數(shù)概念的拓展既不像,也不像是。如果不調(diào)用函數(shù),就不會執(zhí)行如果如果不訂閱,也不會執(zhí)行。 Observable(可觀察對象)是基于推送(Push)運行時執(zhí)行(lazy)的多值集合。下方表格對Observable進行了定位(為解決基于推送的...
摘要:通過執(zhí)行和可以向訂閱者推送不同的通知。之后,執(zhí)行過程可能被處理掉。當(dāng)調(diào)用并得到觀察者時,在中傳入的函數(shù)將會被執(zhí)行。每次執(zhí)行都會觸發(fā)一個單獨針對當(dāng)前的運行邏輯。通知不發(fā)出任何值,表示流的結(jié)束。 原文:http://reactivex.io/rxjs/manu... Rx.Observalbe.create()或者創(chuàng)建操作符,可以 創(chuàng)建(created) Observable流。Obser...
摘要:到底是什么先上代碼輸出這里可以把想象成一個函數(shù),這意味著你每次調(diào)用都會導(dǎo)致傳入里的回調(diào)函數(shù)重新執(zhí)行一次調(diào)用的方式為相當(dāng)于。接收函數(shù)返回值的方式也從改為通過傳入回調(diào)函數(shù)的方式獲取。具體看代碼運行結(jié)果如上的第一個回調(diào)函數(shù)里的結(jié)構(gòu)是推薦的結(jié)構(gòu)。 通俗的方式理解Rx.js 序言 今早看民工叔的文章的時候, 發(fā)現(xiàn)對Rxjs所知甚少, 于是去官方看了下教程, 整理出一些東西, 寫成此文。Rxjs據(jù)...
閱讀 2207·2023-04-25 17:48
閱讀 3656·2021-09-22 15:37
閱讀 2993·2021-09-22 15:36
閱讀 6147·2021-09-22 15:06
閱讀 1698·2019-08-30 15:53
閱讀 1500·2019-08-30 15:52
閱讀 783·2019-08-30 13:48
閱讀 1189·2019-08-30 12:44