Rxjs学习笔记二

论坛 期权论坛 脚本     
匿名技术用户   2020-12-23 01:30   33   0

--------------除了上帝,一切皆有起源----------------

创建同步数据流

只需要关心产生哪些数据,数据之间的先后顺序如何,不需要考虑时间方面的问题

  • of:列举数据

把参数数据用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:指定范围

range的第一个参数是梳子序列开始的数字,第二个参数是数字序列的长度;和of一样,以同步的方式吐出数据,,一口气全推给Observer,然后调用Observer的complete函数

Rx.Observable.range(1,4).subscribe(x=>console.log(x))   //1,2,3,4
  • generate:循环创建

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和timer定时产生数据

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接受一个函数作为参数,当defer产生的Observable对象被订阅的时候,defer函数参数就会被调用,预期这个函数会返回另一个Observable对象

var a=()=>Rx.Observable.of(1,2,3)

Rx.Observable.defer(a).subscribe(x=>console.log(x))

//1,2,3

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP