• rxjs


    一、RxJS是什么

    RxJS 是一个库,它通过使用 observable 序列来编写异步和基于事件的程序。它提供了一个核心类型 Observable,附属类型 (Observer、 Schedulers、 Subjects) 和受 [Array#extras] 启发的操作符 (map、filter、reduce、every, 等等),这些数组操作符可以把异步事件作为集合来处理。

    可以把 RxJS 当做是用来处理事件的 Lodash 。

    ReactiveX 结合了 观察者模式迭代器模式 和 使用集合的函数式编程,以满足以一种理想方式来管理事件序列所需要的一切。

    在 RxJS 中用来解决异步事件管理的的基本概念是:

    • Observable (可观察对象): 表示一个概念,这个概念是一个可调用的未来值或事件的集合。
    • Observer (观察者): 一个回调函数的集合,它知道如何去监听由 Observable 提供的值。
    • Subscription (订阅): 表示 Observable 的执行,主要用于取消 Observable 的执行。
    • Operators (操作符): 采用函数式编程风格的纯函数 (pure function),使用像 mapfilterconcatflatMap 等这样的操作符来处理集合。
    • Subject (主体): 相当于 EventEmitter,并且是将值或事件多路推送给多个 Observer 的唯一方式。
    • Schedulers (调度器): 用来控制并发并且是中央集权的调度员,允许我们在发生计算时进行协调,例如 setTimeout 或 requestAnimationFrame 或其他。

     在线demo:rxjs可视化工具

    二、当下前端异步已经有async 和 promise的情况下,异步复杂到什么程度才需要使用rxjs?

     要想搞清楚这个问题,首先要知道Observable 和 Promise 的区别,大概场景有:

    1.直接的场景就是前端复杂状态管理,使用 RxJS 管理很容易,如果使用 Promise 就必须要借助第三方状态管理的库

    那么在某些场景下区别不大,比如一个 Http 的请求,使用 RxJS Observable 比 Promise 没有质的好处,区别就是 Observable 你不订阅就不会请求,Promise 就是只要生成了 Promise 就会请求。

    例如:

    有n个ip,每个ip要ping最多x次,有y次成功即可停止。总共若有m个ip成功停止则停止其他未完成的请求。然后给出最快的这m个ip,按ping值从小到大排列。

    看历史用promise写的代码(promise套promise)看得脑瓜疼、胃疼、想吐,生理上的。。

    改用rxjs,只需30来行轻松搞定还没bug。

    2.Rx 适合复杂的异步时间和数据流等,RxJS带来的一个巨大好处是解耦,使用无副作用的操作符来连接各种完整的代码逻辑,能使代码简洁清晰,维护也方便,

    简单的小场景用 Rx 只是自己给自己找麻烦。而且 Rx 的侵入性特别强,基本上用了之后都是 Rx 那一套东西了。不要为了 Rx 而 Rx

    3.rx 是处理「流」的,不是处理「异步」的,

    每个 rxjs 的 api 就是一种场景,里面 80%场景使用 promise 难以实现或者是需要写更多的代码才可以实现

  • 相关阅读:
    玩家上线
    小退
    GS发包到MS
    share初始化
    3 水仙花数
    The left-hand side of an assignment must be a variable,代码中使用了中文的字符
    Mac Sublime Text 浏览器 设置快捷键 让html文件在浏览器打开
    2 质数求解
    1 斐波那契的兔子
    18 赛手的名单
  • 原文地址:https://www.cnblogs.com/ygunoil/p/15523200.html
Copyright © 2020-2023  润新知