rxjs學習筆記


api List

Rx.Observable.amb(...args)

-存在競爭關系,amb里的流只能觸發一個,並且忽略其他未處理的流。

eq:

<body>
  <input id="input1" type="text">
  <input id="input2" type="text">
</body>
import $ from "jquery";
import Rx from "rx";
var input1 = $('#input1');
var input2 = $('#input2');
var source = Rx.Observable.amb( Rx.Observable.fromEvent(input1, 'click').map(()=>'one'), Rx.Observable.fromEvent(input2, 'click').map(()=>'two') ); var subscription = source.subscribe( function (x) { console.log(x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } );

訂閱了某個事件以后只處理本事件。訂閱是普通訂閱。

 Rx.Observable.case(selector, sources, [elseSource|scheduler]

 -select是一個篩選函數返回一個字符串,將字符串與sources對象的鍵值相匹配,發射匹配到的流。后面可選的是未匹配到的情況,默認是Rx.Observable.empty()

eq:

import Rx from "rx";

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,就發射Rx.Observable.just('clx')流。

實際可用於請求后的配置,比如根據ajax配置數據庫,

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
    })

 

 根據不同配置項進行不同的操作。

Rx.Observable.catch(...args)

args都是一個個的觀察流,當某一個拋錯了,剩下的繼續被發射。錯誤被忽略。subscribe也不會打印。當全部都拋錯,會在subscribe的onError里打印。

eq:

import Rx from "rx";
var obs1 = Rx.Observable.throw(new Error('error'));
var obs2 = Rx.Observable.return(42);

var source = Rx.Observable.catch(obs1, obs2);

var subscription = source.subscribe(
  x => console.log(`onNext: ${x}`),
  e => console.log(`onError: ${e}`),
  () => console.log('onCompleted'));

 

obs1拋錯以后,42被正常輸出。

項目中可以處理服務商提供服務,當第一個服務商掛掉以后用第二個,全掛掉就拋錯吧。

Rx.Observable.combineLatest(...args, [resultSelector])

-當兩個Observables中的任何一個發射了數據時,使用一個函數結合每個Observable發射的最近數據項,並且基於這個函數的結果發射數據。

-仔細理解這句話,合並最近發射。

eq:

import Rx from "rx";

var colors = ["紫色","黃色","藍色","黑色"];
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(12);

combined.subscribe((shaped)=>console.log(shaped));

 

2s時發射五邊形,x=五邊形,1s后發射黑色,打印,1s后又發射心形,這時x還是黑色,打印黑色的心形。……

暈。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM