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
留言列表