国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

RxJS API解析(二)

chanthuang / 3479人閱讀

摘要:當(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)返回。 如果沒有明確指定,將返回附加了指定schedulerRx.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

相關(guān)文章

  • RxJS API解析(一)

    摘要:選擇后,僅有聯(lián)通的可觀察對(duì)象會(huì)被觀察到。從外部看,所有訂閱者僅能觀測到這個(gè)聯(lián)通了支流。,其中表示輸入流,是操作符,是最后的輸出流。截圖驗(yàn)證一下當(dāng)一個(gè)流被聯(lián)通后,其他的流腫么辦先記住結(jié)論未被選擇的流將被調(diào)用方法,也就是說,他們被終止了。 起因 在SegmentFault里發(fā)布過一篇RxJS的簡明教程,很多人反饋對(duì)這個(gè)主題很是很感興趣,詳見RxJS簡明教程。 Rx 是一種編程的思維,而不是...

    姘擱『 評(píng)論0 收藏0
  • RxJS API解析(四)

    摘要:任何程序設(shè)計(jì)語言在講解遞歸特性時(shí),基本都會(huì)舉漢諾塔斐波拉契數(shù)列的例子。沒錯(cuò),請你對(duì)比一下斐波拉契數(shù)列和定義的相似之處遞歸完成后產(chǎn)生值的過程就是的過程。 Rx*(Observable.combineLatest)方法 方法定義 Rx.Observable.combineLatest(...args, [resultSelector]) 作用 通過處理函數(shù)總是將指定的可觀察對(duì)象序列中最新發(fā)...

    cheng10 評(píng)論0 收藏0
  • RxJS API解析(三)

    摘要:題外話服務(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ì)象序列。 返...

    banana_pi 評(píng)論0 收藏0
  • Rxjs 響應(yīng)式編程-第章:序列的深入研究

    摘要:接下來,我們將實(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)建完整...

    姘擱『 評(píng)論0 收藏0
  • 【響應(yīng)式編程的思維藝術(shù)】 (5)Angular中Rxjs的應(yīng)用示例

    摘要:本文是響應(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...

    shenhualong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<