摘要:當無法匹配時,該對象被默認返回。如果沒有明確指定,將返回附加了指定的對象。返回值返回值為經過選擇后的可觀察對象。題外話鍵值對,可以對值進行命名。鍵值對是對象的組成部分,鍵名可以方便進行查找和比較操作。
Rx* (Observable.case)方法 方法定義
[Rx.Observable.case(selector, sources, [elseSource|scheduler])]
作用選擇序列中特定可觀察對象進行訂閱,在特定可觀察對象不存在的情況下,返回傳入的默認可觀察對象。
參數selector (Function): 返回鍵的字符串的函數,鍵用以與sources中的鍵名進行比較。
sources (Object): 一個包含可觀察對象的Javascript對象。
[elseSource|scheduler] (Observable | Scheduler):當selector無法匹配sources時,該對象被默認返回。 如果沒有明確指定,將返回附加了指定scheduler的Rx.Observabe.empty 對象。
返回值(Observable): 返回值為經過選擇后的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) })
實例中,匿名函數()=>"hello"指定需要在sources中返回的可觀察對象的鍵名為"hello",命令行最終輸出"clx",點擊進入case()實例。
題外話鍵值對,可以對值進行命名。通過鍵值對可以構造命名的observable可觀察對象。
鍵值對是Javascript對象的組成部分,鍵名可以方便進行查找和比較操作。
兩個典型的使用場景中,數據都是用鍵值對表示的:通過Ajax請求獲得的數據,就是一個鍵值對(JSON"對象);許多配置文件也是鍵值對寫入并持久化的,比如數據庫、緩存的配置。
典型的Ajax請求結果
{ message: "ok", nu: "350430378480", companytype: "huitongkuaidi", ischeck: "1", com: "huitongkuaidi", updatetime: "2016-01-15 10:58:19", status: "200", condition: "F00", codenumber: "350430378480" }
Laravel 的數據庫配置
"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, ]
試想,我們從不同的其他服務器獲取配置文件,那么整個獲取配置的過程是異步的。
我們將獲取的結果封裝成可觀察對象,再命名為如database這樣名稱的鍵值對,使用case()方法便可以在可觀察對象發射時,執行相應的初始化操作。
var config = { "database": Observable.return("數據庫配置"), "cache": Observable.return("緩存配置"), "picCDN": Observable.return("圖片CDN配置,比如七牛") }; Observable.case(()=>"database", config, Observable.empty()) .subscribe((databaseConfig) => { // 連接數據庫 }) Observable.case(()=>"picCDN", config, Observable.empty()) .subscribe((pciCDNConfig) => { // 初始化圖片CDN })
把上面的例子分開寫也沒有什么問題:
Observable.return("數據庫配置") .subscribe(function(databaseConfig) { // 鏈接數據庫 }) Observable.return("圖片CDN配置,比如七牛") .subscribe(function(picCDNConfig) { // 初始化圖片CDN })
我們為何要多此一舉去使用case()呢?從結構化去考慮,將所有從遠程獲取配置的過程封裝成config對象更有實際意義,也更便于代碼的維護和管理。
我們再看一個例子作為結束:例子是針對表單進行校驗,校驗用戶的手機號和郵箱是否和服務器記錄重復,將所有校驗封裝在validate對象中結構更為合理:
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){ // 驗證手機號碼是否重復 }) validate.case(()=>"email", validate, empty) .subscribe(function(email){ // 驗證用戶郵箱是否重復 })
劇終
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/91597.html
摘要:選擇后,僅有聯通的可觀察對象會被觀察到。從外部看,所有訂閱者僅能觀測到這個聯通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗證一下當一個流被聯通后,其他的流腫么辦先記住結論未被選擇的流將被調用方法,也就是說,他們被終止了。 起因 在SegmentFault里發布過一篇RxJS的簡明教程,很多人反饋對這個主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...
摘要:任何程序設計語言在講解遞歸特性時,基本都會舉漢諾塔斐波拉契數列的例子。沒錯,請你對比一下斐波拉契數列和定義的相似之處遞歸完成后產生值的過程就是的過程。 Rx*(Observable.combineLatest)方法 方法定義 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通過處理函數總是將指定的可觀察對象序列中最新發...
摘要:題外話服務可用性是指,服務提供者需要保證服務在任何時間情況下正確地提供。然后服務提供者,會將驗證碼發送到用戶手機。 Rx* (Observable.catch)方法 方法定義 Rx.Observable.catch(...args) 作用 序列中可觀察對象因為異常而被終止后,繼續訂閱序列中的其他可觀察對象。 參數 args (Array | arguments): 可觀察對象序列。 返...
摘要:接下來,我們將實現一個真實的應用程序,顯示幾乎實時發生的地震。得到的由表示,其中包含和的合并元素。如果不同同時傳出元素,合并序列中這些元素的順序是隨機的。是操作序列的強大操作符。但是的方法仍在運行,表明取消并不會取消關聯的。 Rxjs 響應式編程-第一章:響應式Rxjs 響應式編程-第二章:序列的深入研究Rxjs 響應式編程-第三章: 構建并發程序Rxjs 響應式編程-第四章 構建完整...
摘要:本文是響應式編程第四章構建完整的應用程序這篇文章的學習筆記。涉及的運算符每隔指定時間將流中的數據以數組形式推送出去。中提供了一種叫做異步管道的模板語法,可以直接在的微語法中使用可觀測對象示例五一點建議一定要好好讀官方文檔。 本文是【Rxjs 響應式編程-第四章 構建完整的Web應用程序】這篇文章的學習筆記。示例代碼托管在:http://www.github.com/dashnoword...
閱讀 3556·2021-10-09 09:43
閱讀 6167·2021-09-07 10:15
閱讀 2753·2019-08-30 14:03
閱讀 3080·2019-08-29 11:01
閱讀 1723·2019-08-29 10:56
閱讀 1082·2019-08-28 17:52
閱讀 3507·2019-08-26 11:42
閱讀 2557·2019-08-26 10:33