RxJS 笔记 08

参考 简书原文 作者:readilen

1 Operators

1-1 take 取前几个元素后就结束

// source : -----0-----1-----2-----3--..
//                 take(3)
// example: -----0-----1-----2|
var source = Rx.Observable.interval(1000);
var example = source.take(3);

example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
// 0
// 1
// 2
// complete

1-2 first 取 observable 送出的第 1 个元素之后就直接结束,行为跟 take(1) 一致。

// source : -----0-----1-----2-----3--..
//                 first()
// example: -----0|
var source = Rx.Observable.interval(1000);
var example = source.first();

example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});

// 0
// complete

1-3 takeUntil 让一个 observable 直送出 完成(complete)讯息

// source : -----0-----1-----2------3--
// click  : ----------------------c----
//                 takeUntil(click)
// example: -----0-----1-----2----|
var source = Rx.Observable.interval(1000);
var click = Rx.Observable.fromEvent(document.body, 'click');
var example = source.takeUntil(click);     

example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
// 0
// 1
// 2
// 3
// complete (点击body了

1-4 concatAll

// click  : ------c------------c--------
//
//         map(e => Rx.Observable.of(1,2,3))
//
// source : ------o------------o--------
//                \            \
//                  (123)|       (123)|
//
//                    concatAll()
//
// example: ------(123)--------(123)------------
var click = Rx.Observable.fromEvent(document.body, 'click');
var source = click.map(e => Rx.Observable.of(1,2,3));

var example = source.concatAll();
example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
// source : (o1                 o2      o3)|
//            \                  \       \
//             --0--1--2--3--4|   -0-1|   ----0|
//
//                 concatAll()        
//
// example: --0--1--2--3--4-0-1----0|
var obs1 = Rx.Observable.interval(1000).take(5);
var obs2 = Rx.Observable.interval(500).take(2);
var obs3 = Rx.Observable.interval(2000).take(1);

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

var example = source.concatAll();

example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
// 0
// 1
// 2
// 3
// 4
// 0
// 1
// 0
// complete