摘要:任何程序設計語言在講解遞歸特性時,基本都會舉漢諾塔斐波拉契數(shù)列的例子。沒錯,請你對比一下斐波拉契數(shù)列和定義的相似之處遞歸完成后產(chǎn)生值的過程就是的過程。
Rx*(Observable.combineLatest)方法 方法定義
Rx.Observable.combineLatest(...args, [resultSelector])
作用通過處理函數(shù)總是將指定的可觀察對象序列中最新發(fā)射的值合并為一個可觀察對象。
參數(shù)args (arguments | Array): 一系列可觀察對象或可觀察對象的數(shù)組。
[resultSelector] (Function): 在所有可觀察對象都發(fā)射值后調(diào)用的處理函數(shù)。
返回值(Observable): 由傳入的可觀察序列經(jīng)過處理函數(shù)合并后的結(jié)果組成的可觀察序列。
寶珠圖Observable.combineLastest()函數(shù),總是合并序列中最新發(fā)射的值。寶珠圖中的顏色球發(fā)射顏色,空白的圖形發(fā)射待染色圖形,處理函數(shù)對待染色對象進行染色:總是用戶最新發(fā)射的顏色或者對最新發(fā)射的待染色對象。
假設顏色序列僅發(fā)射了第一個寶珠淺紫色且后續(xù)不再發(fā)射,那么結(jié)果街將會是一個由淺紫色組成的染色后對象的序列。
使用官方可拖動寶珠圖,可以幫助理解,拖動序列中的寶珠,觀察輸出序列的變化。
實例var colors = ["紫色","黃色","藍色","黑色"]; var shapes = ["小星星","圓形","三角形","正方形","心形","五邊形"]; var source1 = Rx.Observable.interval(3000) .map(()=>colors.pop()); var source2 = Rx.Observable.interval(2000) .map(()=>shapes.pop()); var combined = Rx.Observable.combineLatest(source1, source2, function(x, y){ return x + "的" + y; }).take(8); combined.subscribe((shaped)=>console.log(shaped));
實例模擬第一個寶珠圖,點擊進入可運行實例。其中列1發(fā)射顏色值,序列2發(fā)射形狀。結(jié)果輸出染色后的形狀:
"黑色的五邊形" "黑色的心形" "藍色的心形" "藍色的正方形" "藍色的三角形" "黃色的三角形" "黃色的圓形" "紫色的圓形"
還有一個非常好的實例在前面的文章中,是combineLatest()在緩存數(shù)據(jù)方面的應用,如果你想深入理解combineLatest()不妨看一下。
題外話寫這個專題的時候,對Rx的抽象能力贊嘆不已。
大家通常把編寫一個框架的工作稱作“造輪子”。
“輪子”是一個針對某一類問題的解決方案,通常是由于反復解決某一個工程問題而產(chǎn)生的。某種程度上,輪子可以一勞永逸,同時輪子的使用可以大大地提高生產(chǎn)的效率(試想想你在使用如Rails這類有 ORM特性框架時的感受)。
Rx似乎從另一個方面而不是實際問題進行抽象——數(shù)學,是一個函數(shù)式編程模式。從數(shù)學而不是工程作為起點,創(chuàng)造的工具的威力_可能_更強大,但是學習成本(使用成本)_可能_會更高。
任何程序設計語言在講解遞歸特性時,基本都會舉漢諾塔、斐波拉契數(shù)列的例子。沒錯,請你對比一下斐波拉契數(shù)列和combineLatest()定義的相似之處:
def fibo(i): if i==0 or i==1: return 1 else: return fibo(i-1)+fibo(i-2)
Oops!遞歸完成后產(chǎn)生值的過程就是combineLatest()的過程。
在學習Rx的操作符時,請反復地理解操作符的作用、限制。最好的理解方法是構建一個場景。
在combineLatest()中,我們不妨將場景限定為擁有兩個可觀察對象的可觀察序列,并且對象A總是較低頻率地發(fā)射新值,而對象B比較頻繁地發(fā)射:
A ----*----------------*----------> B -----@---@---@---@---@----@----->
那么對象A在實際中可能是什么?緩存后的http請求后的數(shù)據(jù)、異步獲取的配置文件...
對象B自然可以是,與服務器的實時同步、用戶上傳圖片的實時上傳、用戶在列表中執(zhí)行的翻頁操作...
前面的文章中緩存Github用戶的就是上面提到的場景。
劇終
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/78553.html
摘要:選擇后,僅有聯(lián)通的可觀察對象會被觀察到。從外部看,所有訂閱者僅能觀測到這個聯(lián)通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗證一下當一個流被聯(lián)通后,其他的流腫么辦先記住結(jié)論未被選擇的流將被調(diào)用方法,也就是說,他們被終止了。 起因 在SegmentFault里發(fā)布過一篇RxJS的簡明教程,很多人反饋對這個主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...
摘要:當無法匹配時,該對象被默認返回。如果沒有明確指定,將返回附加了指定的對象。返回值返回值為經(jīng)過選擇后的可觀察對象。題外話鍵值對,可以對值進行命名。鍵值對是對象的組成部分,鍵名可以方便進行查找和比較操作。 Rx* (Observable.case)方法 方法定義 [Rx.Observable.case(selector, sources, [elseSource|scheduler])] ...
摘要:題外話服務可用性是指,服務提供者需要保證服務在任何時間情況下正確地提供。然后服務提供者,會將驗證碼發(fā)送到用戶手機。 Rx* (Observable.catch)方法 方法定義 Rx.Observable.catch(...args) 作用 序列中可觀察對象因為異常而被終止后,繼續(xù)訂閱序列中的其他可觀察對象。 參數(shù) args (Array | arguments): 可觀察對象序列。 返...
摘要:本文是響應式編程第四章構建完整的應用程序這篇文章的學習筆記。涉及的運算符每隔指定時間將流中的數(shù)據(jù)以數(shù)組形式推送出去。中提供了一種叫做異步管道的模板語法,可以直接在的微語法中使用可觀測對象示例五一點建議一定要好好讀官方文檔。 本文是【Rxjs 響應式編程-第四章 構建完整的Web應用程序】這篇文章的學習筆記。示例代碼托管在:http://www.github.com/dashnoword...
摘要:接下來,我們將實現(xiàn)一個真實的應用程序,顯示幾乎實時發(fā)生的地震。得到的由表示,其中包含和的合并元素。如果不同同時傳出元素,合并序列中這些元素的順序是隨機的。是操作序列的強大操作符。但是的方法仍在運行,表明取消并不會取消關聯(lián)的。 Rxjs 響應式編程-第一章:響應式Rxjs 響應式編程-第二章:序列的深入研究Rxjs 響應式編程-第三章: 構建并發(fā)程序Rxjs 響應式編程-第四章 構建完整...
閱讀 3060·2023-04-26 00:49
閱讀 3726·2021-09-29 09:45
閱讀 989·2019-08-29 18:47
閱讀 2748·2019-08-29 18:37
閱讀 2729·2019-08-29 16:37
閱讀 3296·2019-08-29 13:24
閱讀 1779·2019-08-27 10:56
閱讀 2350·2019-08-26 11:42