摘要:當(dāng)無法匹配時(shí),該對(duì)象被默認(rèn)返回。如果沒有明確指定,將返回附加了指定的對(duì)象。返回值返回值為經(jīng)過選擇后的可觀察對(duì)象。題外話鍵值對(duì),可以對(duì)值進(jìn)行命名。鍵值對(duì)是對(duì)象的組成部分,鍵名可以方便進(jìn)行查找和比較操作。
Rx* (Observable.case)方法 方法定義
[Rx.Observable.case(selector, sources, [elseSource|scheduler])]
作用選擇序列中特定可觀察對(duì)象進(jìn)行訂閱,在特定可觀察對(duì)象不存在的情況下,返回傳入的默認(rèn)可觀察對(duì)象。
參數(shù)selector (Function): 返回鍵的字符串的函數(shù),鍵用以與sources中的鍵名進(jìn)行比較。
sources (Object): 一個(gè)包含可觀察對(duì)象的Javascript對(duì)象。
[elseSource|scheduler] (Observable | Scheduler):當(dāng)selector無法匹配sources時(shí),該對(duì)象被默認(rèn)返回。 如果沒有明確指定,將返回附加了指定scheduler的Rx.Observabe.empty 對(duì)象。
返回值(Observable): 返回值為經(jīng)過選擇后的Observable(可觀察對(duì)象)。
寶珠圖 實(shí)例var sources = { hello: Rx.Observable.just("clx"), world: Rx.Observable.just("wxq") }; var subscription = Rx.Observable.case(()=>"hello", sources, Rx.Observable.empty()) subscription.subscribe(function(x) { console.log(x) })
實(shí)例中,匿名函數(shù)()=>"hello"指定需要在sources中返回的可觀察對(duì)象的鍵名為"hello",命令行最終輸出"clx",點(diǎn)擊進(jìn)入case()實(shí)例。
題外話鍵值對(duì),可以對(duì)值進(jìn)行命名。通過鍵值對(duì)可以構(gòu)造命名的observable可觀察對(duì)象。
鍵值對(duì)是Javascript對(duì)象的組成部分,鍵名可以方便進(jìn)行查找和比較操作。
兩個(gè)典型的使用場景中,數(shù)據(jù)都是用鍵值對(duì)表示的:通過Ajax請求獲得的數(shù)據(jù),就是一個(gè)鍵值對(duì)(JSON"對(duì)象);許多配置文件也是鍵值對(duì)寫入并持久化的,比如數(shù)據(jù)庫、緩存的配置。
典型的Ajax請求結(jié)果
{ message: "ok", nu: "350430378480", companytype: "huitongkuaidi", ischeck: "1", com: "huitongkuaidi", updatetime: "2016-01-15 10:58:19", status: "200", condition: "F00", codenumber: "350430378480" }
Laravel 的數(shù)據(jù)庫配置
"mysql" => [ "read" => [ "host" => "127.0.0.1", ], "write" => [ "host" => "127.0.0.1" ], "driver" => "mysql", "database" => "homestead", "username" => env("DB_USERNAME", "root"), "password" => env("DB_PASSWORD", ""), "charset" => "utf8", "collation" => "utf8_general_ci", "prefix" => "", "strict" => false, ]
試想,我們從不同的其他服務(wù)器獲取配置文件,那么整個(gè)獲取配置的過程是異步的。
我們將獲取的結(jié)果封裝成可觀察對(duì)象,再命名為如database這樣名稱的鍵值對(duì),使用case()方法便可以在可觀察對(duì)象發(fā)射時(shí),執(zhí)行相應(yīng)的初始化操作。
var config = { "database": Observable.return("數(shù)據(jù)庫配置"), "cache": Observable.return("緩存配置"), "picCDN": Observable.return("圖片CDN配置,比如七牛") }; Observable.case(()=>"database", config, Observable.empty()) .subscribe((databaseConfig) => { // 連接數(shù)據(jù)庫 }) Observable.case(()=>"picCDN", config, Observable.empty()) .subscribe((pciCDNConfig) => { // 初始化圖片CDN })
把上面的例子分開寫也沒有什么問題:
Observable.return("數(shù)據(jù)庫配置") .subscribe(function(databaseConfig) { // 鏈接數(shù)據(jù)庫 }) Observable.return("圖片CDN配置,比如七牛") .subscribe(function(picCDNConfig) { // 初始化圖片CDN })
我們?yōu)楹我啻艘慌e去使用case()呢?從結(jié)構(gòu)化去考慮,將所有從遠(yuǎn)程獲取配置的過程封裝成config對(duì)象更有實(shí)際意義,也更便于代碼的維護(hù)和管理。
我們再看一個(gè)例子作為結(jié)束:例子是針對(duì)表單進(jìn)行校驗(yàn),校驗(yàn)用戶的手機(jī)號(hào)和郵箱是否和服務(wù)器記錄重復(fù),將所有校驗(yàn)封裝在validate對(duì)象中結(jié)構(gòu)更為合理:
var validate = { "mobile": Observable.return("123-566-789-01"), "email": Observable.return("JonSnow@company.com") }; var emptyObserable = Observable.empty(); validate.case(()=>"mobile", validate, empty) .subscribe(function(mobile){ // 驗(yàn)證手機(jī)號(hào)碼是否重復(fù) }) validate.case(()=>"email", validate, empty) .subscribe(function(email){ // 驗(yàn)證用戶郵箱是否重復(fù) })
劇終
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/91597.html
摘要:選擇后,僅有聯(lián)通的可觀察對(duì)象會(huì)被觀察到。從外部看,所有訂閱者僅能觀測到這個(gè)聯(lián)通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗(yàn)證一下當(dāng)一個(gè)流被聯(lián)通后,其他的流腫么辦先記住結(jié)論未被選擇的流將被調(diào)用方法,也就是說,他們被終止了。 起因 在SegmentFault里發(fā)布過一篇RxJS的簡明教程,很多人反饋對(duì)這個(gè)主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...
摘要:任何程序設(shè)計(jì)語言在講解遞歸特性時(shí),基本都會(huì)舉漢諾塔斐波拉契數(shù)列的例子。沒錯(cuò),請你對(duì)比一下斐波拉契數(shù)列和定義的相似之處遞歸完成后產(chǎn)生值的過程就是的過程。 Rx*(Observable.combineLatest)方法 方法定義 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通過處理函數(shù)總是將指定的可觀察對(duì)象序列中最新發(fā)...
摘要:題外話服務(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ì)象序列。 返...
摘要:接下來,我們將實(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)建完整...
摘要:本文是響應(yīng)式編程第四章構(gòu)建完整的應(yīng)用程序這篇文章的學(xué)習(xí)筆記。涉及的運(yùn)算符每隔指定時(shí)間將流中的數(shù)據(jù)以數(shù)組形式推送出去。中提供了一種叫做異步管道的模板語法,可以直接在的微語法中使用可觀測對(duì)象示例五一點(diǎn)建議一定要好好讀官方文檔。 本文是【Rxjs 響應(yīng)式編程-第四章 構(gòu)建完整的Web應(yīng)用程序】這篇文章的學(xué)習(xí)筆記。示例代碼托管在:http://www.github.com/dashnoword...
閱讀 3554·2021-10-09 09:43
閱讀 6158·2021-09-07 10:15
閱讀 2751·2019-08-30 14:03
閱讀 3079·2019-08-29 11:01
閱讀 1719·2019-08-29 10:56
閱讀 1078·2019-08-28 17:52
閱讀 3504·2019-08-26 11:42
閱讀 2555·2019-08-26 10:33