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