Observable的性质
三种状态:next、error、complete
特殊的:永不结束、Never(永不发生,永不结束)、Empty(结束但不发射)、Throw(立即进入error状态)
do:用于调试,或与外部交互
scan和reduce:scan累加后返回一个个数一致的流,reduce累加后只返回一个值。
过滤操作符:filter、take、first/last、skip(省略之前的值)…
代码:
let logLabel = '当前值是';
const interval$ = Rx.Observable.interval(1000)
.filter(v=>v%2===0) //加上一个过滤条件,满足条件的发射
// .map(val=>val*2)
// .do(v =>{ //do 相当于临时subscribe,并没有结束流,还可以继续操作流
// console.log(logLabel + v);
// logLabel = '值为';
// })
// .scan((x,y)=>{return x+y;})
.take(4)
.reduce((x,y)=>{return [...x,y];},{})
// .take(4); //first()和take(1)效果是相同的
interval$.subscribe(
function(val){
console.log(val);
}
// function(err){
// console.log(err);
// },
// function(){
// consolo.log('I am a complete');
// }
);
// const timer$ = Rx.Observable.timer(1000,2000); //第一个参数表示 一开始延迟多久发射,第二个参数表示经过多少时间再次发射
// timer$.subscribe(v=>console.log(v));