|
--------------除了上帝,一切皆有起源----------------
创建同步数据流
只需要关心产生哪些数据,数据之间的先后顺序如何,不需要考虑时间方面的问题
把参数数据用Obeservable对象来封装,同步吐出数据,没有任何时间间隔,吐出数据后,这个数据流就终结了
Rx.Observable.of(1,2,3).subscribe(x=>console.log(x)) //1,2,3
Rx.Observable.of([1,2,3]).subscribe(x=>console.log(x)) //[1,2,3]
range的第一个参数是梳子序列开始的数字,第二个参数是数字序列的长度;和of一样,以同步的方式吐出数据,,一口气全推给Observer,然后调用Observer的complete函数
Rx.Observable.range(1,4).subscribe(x=>console.log(x)) //1,2,3,4
generate类似一个for循环,设定一个初始值,每次递增这个值,指导满足某个条件的时候才终止循环;使用generate,四个参数分别对应了for循环中的不同表达式
Rx.Observable.generate(
2, //初始值,相当于for循环中的i=0
value=>value<10, //继续的条件,相当于for中的条件判断
value=>value+2, //每次值得递增
value=>value*value //产生的结果
).subscribe(x=>console.log(x))
//输出4,16,36,64
创建异步数据对象
不光要考虑产生什么数据,还要考虑这些数据之间的时间间隔问题
interval接受一个数值类型的参数,代表产生数据的间隔毫秒数,返回Observable对象就按照这个时间间隔输出递增的整数序列,从0开始
timer:A如果一个参数,表示在指定参数的毫秒数后会吐出一个数据0,然后立刻结束;B如果有两个参数,就会产生一个持续突出数据的Observable对象,类似interval的数据流,第二个参数指定的是各数据之间的时间间隔
Rx.Observable.interval(2000).subscribe(x=>console.log(x))
//时间间隔2S,一次输出0,1,2,3。。。。
Rx.Observable.timer(3000).subscribe(x=>console.log(x))
//3S后输出0,然后结束
Rx.Observable.timer(3000,1000).subscribe(x=>console.log(x))
//3S后开始,时间间隔1S,分别输出0,1,2,3,4。。。
- from:可以把一切转化为Observable
- fromEvent:把DOM中的事件转化为Observable对象中的数据
第一个参数是一个事件源,在浏览器中,最常见的事件源就是特定的DOM元素,第二个参数是事件名称,对应DOM事件就是click,mousemove这样的字符串
- ajax:根据AJAX请求的返回结果产生Observable对象
Rx.Observable.fromEvent(
document.querySelector('#div'),
"click"
).subscribe(
()=>{
Rx.Observable.ajax(url,{responseType:"json"}).
subscribe(value=>{
//to do ...
})
}
)
defer接受一个函数作为参数,当defer产生的Observable对象被订阅的时候,defer函数参数就会被调用,预期这个函数会返回另一个Observable对象
var a=()=>Rx.Observable.of(1,2,3)
Rx.Observable.defer(a).subscribe(x=>console.log(x))
//1,2,3
|