摘要:當(dāng)無法匹配時,該對象被默認(rèn)返回。如果沒有明確指定,將返回附加了指定的對象。返回值返回值為經(jīng)過選擇后的可觀察對象。題外話鍵值對,可以對值進(jìn)行命名。鍵值對是對象的組成部分,鍵名可以方便進(jìn)行查找和比較操作。
Rx* (Observable.case)方法 方法定義
[Rx.Observable.case(selector, sources, [elseSource|scheduler])]
作用選擇序列中特定可觀察對象進(jìn)行訂閱,在特定可觀察對象不存在的情況下,返回傳入的默認(rèn)可觀察對象。
參數(shù)selector (Function): 返回鍵的字符串的函數(shù),鍵用以與sources中的鍵名進(jìn)行比較。
sources (Object): 一個包含可觀察對象的Javascript對象。
[elseSource|scheduler] (Observable | Scheduler):當(dāng)selector無法匹配sources時,該對象被默認(rèn)返回。 如果沒有明確指定,將返回附加了指定scheduler的Rx.Observabe.empty 對象。
返回值(Observable): 返回值為經(jīng)過選擇后的Observable(可觀察對象)。
寶珠圖 實例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ù)()=>"hello"指定需要在sources中返回的可觀察對象的鍵名為"hello",命令行最終輸出"clx",點擊進(jìn)入case()實例。
題外話鍵值對,可以對值進(jìn)行命名。通過鍵值對可以構(gòu)造命名的observable可觀察對象。
鍵值對是Javascript對象的組成部分,鍵名可以方便進(jìn)行查找和比較操作。
兩個典型的使用場景中,數(shù)據(jù)都是用鍵值對表示的:通過Ajax請求獲得的數(shù)據(jù),就是一個鍵值對(JSON"對象);許多配置文件也是鍵值對寫入并持久化的,比如數(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ù)器獲取配置文件,那么整個獲取配置的過程是異步的。
我們將獲取的結(jié)果封裝成可觀察對象,再命名為如database這樣名稱的鍵值對,使用case()方法便可以在可觀察對象發(fā)射時,執(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對象更有實際意義,也更便于代碼的維護(hù)和管理。
我們再看一個例子作為結(jié)束:例子是針對表單進(jìn)行校驗,校驗用戶的手機號和郵箱是否和服務(wù)器記錄重復(fù),將所有校驗封裝在validate對象中結(jié)構(gòu)更為合理:
var validate = { "mobile": Observable.return("123-566-789-01"), "email": Observable.return("[email protected]") }; var emptyObserable = Observable.empty(); validate.case(()=>"mobile", validate, empty) .subscribe(function(mobile){ // 驗證手機號碼是否重復(fù) }) validate.case(()=>"email", validate, empty) .subscribe(function(email){ // 驗證用戶郵箱是否重復(fù) })
劇終
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91597.html
摘要:選擇后,僅有聯(lián)通的可觀察對象會被觀察到。從外部看,所有訂閱者僅能觀測到這個聯(lián)通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗證一下當(dāng)一個流被聯(lián)通后,其他的流腫么辦先記住結(jié)論未被選擇的流將被調(diào)用方法,也就是說,他們被終止了。 起因 在SegmentFault里發(fā)布過一篇RxJS的簡明教程,很多人反饋對這個主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...
摘要:任何程序設(shè)計語言在講解遞歸特性時,基本都會舉漢諾塔斐波拉契數(shù)列的例子。沒錯,請你對比一下斐波拉契數(shù)列和定義的相似之處遞歸完成后產(chǎn)生值的過程就是的過程。 Rx*(Observable.combineLatest)方法 方法定義 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通過處理函數(shù)總是將指定的可觀察對象序列中最新發(fā)...
摘要:題外話服務(wù)可用性是指,服務(wù)提供者需要保證服務(wù)在任何時間情況下正確地提供。然后服務(wù)提供者,會將驗證碼發(fā)送到用戶手機。 Rx* (Observable.catch)方法 方法定義 Rx.Observable.catch(...args) 作用 序列中可觀察對象因為異常而被終止后,繼續(xù)訂閱序列中的其他可觀察對象。 參數(shù) args (Array | arguments): 可觀察對象序列。 返...
摘要:接下來,我們將實現(xiàn)一個真實的應(yīng)用程序,顯示幾乎實時發(fā)生的地震。得到的由表示,其中包含和的合并元素。如果不同同時傳出元素,合并序列中這些元素的順序是隨機的。是操作序列的強大操作符。但是的方法仍在運行,表明取消并不會取消關(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í)筆記。涉及的運算符每隔指定時間將流中的數(shù)據(jù)以數(shù)組形式推送出去。中提供了一種叫做異步管道的模板語法,可以直接在的微語法中使用可觀測對象示例五一點建議一定要好好讀官方文檔。 本文是【Rxjs 響應(yīng)式編程-第四章 構(gòu)建完整的Web應(yīng)用程序】這篇文章的學(xué)習(xí)筆記。示例代碼托管在:http://www.github.com/dashnoword...
閱讀 3559·2021-10-09 09:43
閱讀 6172·2021-09-07 10:15
閱讀 2757·2019-08-30 14:03
閱讀 3087·2019-08-29 11:01
閱讀 1724·2019-08-29 10:56
閱讀 1087·2019-08-28 17:52
閱讀 3508·2019-08-26 11:42
閱讀 2563·2019-08-26 10:33