美文网首页
Rx粗糙介绍

Rx粗糙介绍

作者: 黄咕咕鸡 | 来源:发表于2017-01-12 17:18 被阅读0次

    reactive extensions

    前面讲过,异步很难.那么有没有已经定好的异步代码解决方案呢?这里就介绍微软主导的rx技术.
    rx是一种编程范式,最大的意义,在于提供了一套流式处理的解决方案.所以,基本上,主流语言,都有相对应的Rx库.
    这里我以Rxjs为基础,因为js基本上,人人都会.注:我采用的是 EMCAScript 2015
    

    抛出问题

    假设我现在控制八神庵,我要放一个八稚女,应该怎么做? 下前下后+拳.
    假设现在是你开发拳皇97系统,你要监控玩家的输入,并作出判定处理.那么问题来了,你该怎么处理玩家不断变化的行为?
    

    利用Rx的思路分析这个问题.

    我们画出当前按键的事件流
    
            keyup: ---r--乱七八糟一顿搓,并打够了气可以放超必杀----下-下-前--下--后--拳-拳---
    
    这里,我们玩过游戏的知道,你出招过慢不行,根本不会放出大招.过快也不行,系统不会响应.
    上面的keyup事件流开始慢慢流进系统缓冲区,在缓冲区将事件流按照最小判定时间片段分隔为
    
            buffer:--------r下上-拳-脚---..--下下前下后拳----
    
    这里,我突然想起来,八稚女是超必杀,我需要判断气够不够,于是,我们还要添加一个filter
    
            气够否: ---F---F---F---T---T---T---T---T---F---
    
    最终,我们把这个这个map到对应的出招方法中.于是,我们的事件流就变成了下面这样
    
            八稚女: ---F---F---F---F---F---F---F---F---T---
    

    Rx本质(如何画马)

    1. 把一个可观测对象,流式的把状态放入缓冲区
    2. 迭代这个缓冲区,产生新的流.并注册回调方法监控.
    3. 当回调方法监测到数据满足的时候,执行.
      一言蔽之,不就是观察者模式+迭代器+回调方法嘛....

    Rx的模块

    1. Observable: 可观测序列源.看这个名字,就知道这个是Observer pattern的演化,通过观测变化去产生对应的操作.
    2. Observer: 观察者实例,用来决定何时观察指定数据.
    3. Subscription: 观察数据序列返回订阅实例.
    4. Operators: Observable的操作方法,包括转换数据序列,过滤等,
      所有的Operators方法接受的参数是上一次发送的数据变更的值,而方法返回值我们称之为发射新数据变更.
    5. Subject: 被观察对象.
    6. Schedulers: 控制调度并发,即当Observable接受Subject的变更响应时,可以通过scheduler设置响应方式,目前内置的响应可以调用Object.keys(Rx.Subject)查看。

    一个简单的Rx例子

        // 5.0.0-rc.1
        import Rx from 'rxjs';
        //emit 1 from promise
        const source = Rx.Observable.fromPromise(new Promise(resolve => resolve(1)));
        //add 10 to the value
        const example = source.map(val => val + 10);
        //output: 11
        const subscribe = example.subscribe(val => console.log(val));
    

    相关文章

      网友评论

          本文标题:Rx粗糙介绍

          本文链接:https://www.haomeiwen.com/subject/nbxjbttx.html