close

1.timer和interval差別,每 inverval(1000) 每一秒發出一個遞增的數字如1,2,3,4

timer(1000) 1000秒後發出一個值,終止

//emit immediately, then every 5s  每5000秒發出資料
const source = Rx.Observable.timer(0, 5000);

2.switchmap 會覆蓋前面所發出的資料

//emit immediately, then every 5s  每5000秒發出資料
const source = Rx.Observable.timer(0, 5000);
//switch to new inner observable when source emits, emit items that are emitted
const example = source.switchMap(() => Rx.Observable.interval(500));//每500毫秒會覆蓋前面的資料
//output: 0,1,2,3,4,5,6,7,8,9...0,1,2,3,4,5,6,7,8
const subscribe = example.subscribe(val => console.log(val));

描述:每5000秒發出一個會500毫秒會射出資料的inverval

3.concatall 會先把每個observable收起來

做完第一個才做第二個

如click 兩次,會產生兩個observable的interval

因為inverval永遠不會結束,所以第一個永遠不會結束,第二個永遠不會被執行

 

如果加上一個observable只拿3個資料的條件的話

就可以第一個observable結束再做第二個

var click = Rx.Observable.fromEvent(document.body, 'click');

var source = click.map(e => Rx.Observable.interval(1000).take(3));

var example = source.concatAll();

4.mergemap 意思是可以並發

但重點在限制並發數量

5.

of其實是list

如果要把array傳進observable的話用from

6.combineLast是把兩個observable的最後輸出合併在一起,各自的值放入callback

要等另一方有資料才會輸出到callback

 

如interval(300) ,interval(500)

0   1    2   3   

0     1     2    3

會依序做出

(第一個obsrvable,第二個)

0,0     1,1  2,1    2,2 3,2   3,3

7.subject是一個可以把多個observable同整的角色

如observable可被訂閱,也可observer

8.zip

就是取兩個observable 同序的值

如interval(1500)

interval(300)

 

 0               1          2

0   1     2    3      4    5

會取(0,0)  (1,1)  (2,2)

9.withlastfrom 像combinelast但有著主從關係,只有主輸出時才會觸發callback

會這樣做 

有做(h,0)  (e,0)  (l,0)   (l,1)  (o,1) 

沒故(h,1) (h,0):第三個0  (e,0):第四個0  (l,1):倒數第3個l  

10.

clientx 和offsetx差別

 

一個是event點擊的地方到視窗的x長度,一個是到元素體最左x坐標

11. BehaviorSubject

是一個能讓突然訂閱進來的觀察者馬上收到最後一個狀態

interval(500).take(5) 最後一個是4

observer1,2,3都先訂了

但5分鐘後observer才訂

因為正常來講都發送完了

但behaviorsubject會保留最後一個值

12.

ReplaySubject

 

ReplaySubject(2)

如interval(500).take(5) 最後兩個值是3,4

replaysubject會傳出倒數的2個值給新訂閱進來的觀察者

13.

AsyncSubject   是新訂閱者會收到observable complete時送出最後一個值

14.delay

一開始可以延遲(500)秒

15.delaywhen() 類似map 再delay

把每個元素delay,傳回observable

source .delayWhen( x => Rx.Observable.empty().delay(100 * x * x) );

16.

console.log(Array.from('foo'));
// expected output: Array ["f", "o", "o"]

console.log(Array.from([1, 2, 3], x => x + x));
// expected output: Array [2, 4, 6]

17.transform css   (x,y,z)

18.debounceTime

意思時debounceTime(1000) 有一個值在資料流, 一秒內沒有進任何新的值,一秒後就送出這個值

如果有新的值就拋棄舊的值

interval(300)

debouncetTime(1000)

0 1 2 用了900毫秒

最後送出(2)的值而已

適合用在用戶連點送出,過濾掉前面的點擊,不會造成重複

19. throttleTime

throttleTime 跟debounce差別在於

他在一開始就會先送出值,然後把水龍頭關掉

1秒後再開起來

20.buffer,trottle,debounce不同之處

buffer,把1秒送出的資料做出一組再送出[0,1,2]

debounce會把1秒內送出的最後一個值真實送出

trottle會先把值送出,1秒內的都丟掉,1秒後新的值再送出

20.

Scheduler是一個 虛擬時鐘,資料結構 , 可以執行多種的queue或async asap

 

arrow
arrow
    全站熱搜

    學習程式 發表在 痞客邦 留言(0) 人氣()