九.skip,takeLast,last,concat,startWith,merge
skip
skip(x)
跳过前 x 个元素 ,与take(x)
正好相反, 但原本元素的等待时间仍然存在.
var source = Rx.Observable.interval(1000);
var example = source.skip(3);
example.subscribe({
next: (value) => { console.log(value); },
error: (err) => { console.log('Error: ' + err); },
complete: () => { console.log('complete'); }
});
// 3
// 4
// 5...
source : ----0----1----2----3----4----5--....
skip(3)
example: -------------------3----4----5--...
takeLast
takeLast(x)
取后 X 个元素, 但需要等待整个 Observable 完成(complete),再同步输出.
var source = Rx.Observable.interval(1000).take(6);
var example = source.takeLast(2);
example.subscribe({
next: (value) => { console.log(value); },
error: (err) => { console.log('Error: ' + err); },
complete: () => { console.log('complete'); }
});
// 4
// 5
// complete
source : ----0----1----2----3----4----5|
takeLast(2)
example: ------------------------------(45)|
last
last()
取最后一个元素,与takeLast(1)
效果一致,需要等待整个 Observable 完成.再同步输出.
concat
concat(Observable1,Observable2,....)
, 与 concatAll 一样,必须等待前一个 observable 完成才会继续下一个.
var source = Rx.Observable.interval(1000).take(3);
var source2 = Rx.Observable.of(3)
var source3 = Rx.Observable.of(4,5,6)
var example = source.concat(source2, source3);
example.subscribe({
next: (value) => { console.log(value); },
error: (err) => { console.log('Error: ' + err); },
complete: () => { console.log('complete'); }
});
// 0
// 1
// 2
// 3
// 4
// 5
// 6
// complete
source : ----0----1----2|
source2: (3)|
source3: (456)|
concat()
example: ----0----1----2(3456)|
startWith
startWith(x)
observable 一开始就同步发送一个值 x,常用于保存 函数的起始状态.
source : ----0----1----2----3--...
startWith(0)
example: (0)----0----1----2----3--...
merge
merge(Observable1,Observable2,....)
并行所有Observable,内部所有输入都会立刻被输出,
与 concat
一样是合并 Observable ,但是一个并行一个串行.
总结
准备停止这个系列的更新了,因为感觉台湾大佬的文章讲的函数并不是很详细易懂,但也学会了很多.
毕竟这是16年的文章,受到了翻译以及台湾那边的用词习惯问题的干扰.
之后准备自己直接看中文官网,自己总结文章,因此这个笔记篇章到此结束.
如果有人关注我的笔记的话,十分感谢.