V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
soulmt
V2EX  ›  JavaScript

rxjs 你们拿这个做什么

  •  
  •   soulmt · 2020-09-17 20:12:21 +08:00 · 6152 次点击
    这是一个创建于 1557 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看了一下,学习了一下,感觉很刁,但是不知道怎么使用,大佬们,指导一下,这个使用场景是什么

    39 条回复    2020-09-20 11:22:34 +08:00
    catch
        1
    catch  
       2020-09-17 20:15:56 +08:00 via iPhone   ❤️ 1
    装逼用
    soulmt
        2
    soulmt  
    OP
       2020-09-17 20:40:05 +08:00
    @catch 这话说到头了哈
    zhouyg
        3
    zhouyg  
       2020-09-17 21:22:56 +08:00
    一把屠龙刀
    xrr2016
        4
    xrr2016  
       2020-09-17 21:25:14 +08:00
    主要是用来处理异步数据操作吧,不过感觉设计太复杂,不用😝
    sunjourney
        5
    sunjourney  
       2020-09-17 21:31:35 +08:00
    rxjs 什么业务场景都能胜任,被形容成屠龙刀,也是服了
    peterjose
        6
    peterjose  
       2020-09-17 21:34:20 +08:00
    搞 websocket
    tsvico
        7
    tsvico  
       2020-09-17 21:35:21 +08:00 via Android
    经常用来订阅异步消息
    ddup
        8
    ddup  
       2020-09-17 21:49:29 +08:00
    处理复杂业务用 RxJS:太方便了,实在是太方便了。
    des
        9
    des  
       2020-09-17 21:56:56 +08:00
    在 websocket 里面用 rxjs 简直不要太舒服
    chihiro2014
        10
    chihiro2014  
       2020-09-17 22:37:26 +08:00
    RSocket
    ochatokori
        11
    ochatokori  
       2020-09-17 23:02:44 +08:00 via Android
    angular 自带,懒得 toPromise 就用了
    wunonglin
        12
    wunonglin  
       2020-09-17 23:22:55 +08:00
    真的香,现在完全离不开
    Zchary
        13
    Zchary  
       2020-09-18 02:21:29 +08:00 via iPhone
    RxJS rules ! Ng 用来多请求,数据流控制很舒服
    YYYeung
        14
    YYYeung  
       2020-09-18 02:24:15 +08:00
    回调地狱杀手
    laike9m
        15
    laike9m  
       2020-09-18 03:04:46 +08:00 via Android
    学了很多次都没学懂,可能是我比较笨。。😔
    zjsxwc
        16
    zjsxwc  
       2020-09-18 07:40:54 +08:00 via Android
    最大的优势是,把事件行为数据化,
    比如把用户操作行为、异步回调都变成统一的流化数据
    siweipancc
        17
    siweipancc  
       2020-09-18 09:05:08 +08:00 via iPhone
    写前端代码没有 rxjs 跟吃了屎一样,来自一个后端的怨念
    rrfeng
        18
    rrfeng  
       2020-09-18 09:56:30 +08:00
    Angular 官方推荐,试了一下确实很好用。
    比如之前有这么一个场景:
    一个 timer 定期轮询数据并更新页面,同时可能有几个按钮也会触发这个更新动作。怎么确保这两种触发形式优雅的合作?
    leemove
        19
    leemove  
       2020-09-18 10:00:47 +08:00
    只在 angular 项目里用用,其他项目都没有引入过。虽然他确实好用,但是 js 原生处理异步方式也很多了,async await promise 出来之前他可能是无可替代的。
    dany813
        20
    dany813  
       2020-09-18 10:08:50 +08:00
    哎,在 react 中一直么用过
    wangxiaoaer
        21
    wangxiaoaer  
       2020-09-18 10:11:26 +08:00 via iPhone
    @ddup 举个例子?不是抬杠。
    soulmt
        22
    soulmt  
    OP
       2020-09-18 11:53:43 +08:00
    @tsvico 你们的技术栈是什么? 什么情况下需要在业务里面订阅消息。
    soulmt
        23
    soulmt  
    OP
       2020-09-18 11:54:28 +08:00
    @des 没用过 websocket 不过 socket 推送和 rxjs 的订阅 仿佛是个不错的组合。
    soulmt
        24
    soulmt  
    OP
       2020-09-18 11:55:04 +08:00
    @wunonglin 你们技术栈是什么,什么业务用。怎么香
    soulmt
        25
    soulmt  
    OP
       2020-09-18 12:03:03 +08:00
    @siweipancc 后端有各种消息,大量的数据处理,前端这边就比较少了吧,前端我更多的是业务逻辑上的,
    soulmt
        26
    soulmt  
    OP
       2020-09-18 12:05:22 +08:00
    @rrfeng 这确实也是个场景,不同的 入口或者流程但是 最终的结果是一致的,并且互相不能影响如果用 js 的话可能要维护各种状态来做控制了
    soulmt
        27
    soulmt  
    OP
       2020-09-18 12:07:31 +08:00
    @leemove 害 难怪我不知道怎么用 你们用的 sockect angular 我都没用过,只是最近在写 cli 的时候遇到了 rx 然后发现很吊,想运用到业务中,发现好像没什么容身之处,可能是我对 rxjs 没有深刻认知导致的。 目前的技术栈 react 。
    wunonglin
        28
    wunonglin  
       2020-09-18 12:08:30 +08:00
    @soulmt #24 angular 。在能用 rxjs 的时候就基本不会用 promise 了,流式异步简直不要太爽
    soulmt
        29
    soulmt  
    OP
       2020-09-18 12:12:25 +08:00
    @wunonglin 晓得了,angular 的场子, 我不应该来的。哈哈
    wunonglin
        30
    wunonglin  
       2020-09-18 12:18:54 +08:00
    @soulmt #29 就算三大框架都不用也能用 rxjs,现在写些小页面都用这做事件订阅之类的了,总之就是好处多多
    gzf6
        31
    gzf6  
       2020-09-18 13:45:55 +08:00
    rx 不光是 rxjs 了,这种模式已经有好多语言的实现了,可以了解下
    ddup
        32
    ddup  
       2020-09-18 14:12:10 +08:00
    @wangxiaoaer #21 用 RxJs 的话,需要配合 TypeScript 有完善的智能提示,这样体验更好,我用的是 Angular,不过即使是 Vue 也是一样可以很方便的和 RxJs 结合的。

    以前对 RxJs 了解有限,因为业务复用杂想应用下 RxJs 看到底有没有那么香,学起来确实要费点劲的,因为 RxJs 理念很不一样,文档也很学术,例子不接地气,担是学成会用之后,爱不释手,写起来感觉很爽,相见恨晚。


    例子的话,说个场景,比如有个功能同时有以下需要:
    多个异步结果合并(且其中某个异步出错则 fallback 不终止执行)
    延迟执行
    出错重试
    异常后根据条件判断是抛出异常还是 fallback
    各种异步请求依赖和嵌套,请求数据二次加工处理

    RxJs 可以清晰优雅的实现这个功能。
    qwerthhusn
        33
    qwerthhusn  
       2020-09-18 14:23:23 +08:00
    就是 async await 出来之前
    RxJS 可以很好的解决 Callback Hell
    soulmt
        34
    soulmt  
    OP
       2020-09-18 14:56:17 +08:00
    @gzf6 这我知道,rx 已经支持了很多种语言
    soulmt
        35
    soulmt  
    OP
       2020-09-18 14:57:35 +08:00
    @qwerthhusn 是的 es6 提供了很多方法用 promise+各种函数链式调用,也可以写的很舒畅。
    soulmt
        36
    soulmt  
    OP
       2020-09-18 15:02:37 +08:00
    @ddup
    多个异步结果合并 Promise 在新的 api 中也支持了。
    延迟执行 延迟执行 js 也可以,在 promise 中间加一个延迟的中间件就可以做到,
    异常后根据条件判断是抛出异常还是 这个也可以,promise catch 和 then 可以决定 让这个 promise 走异常还是继续 then

    感觉你说的 promise 好像都可以实现,不知道是否可以说说它和 promise 对异步处理的优劣点
    crclz
        37
    crclz  
       2020-09-19 09:27:17 +08:00
    @laike9m 不是你比较笨,而是你压根没有想要把 rxjs 用于开发(或者制作一个 demo )。只有当你逼迫自己的时候,你才能够掌握 rxjs 。


    @soulmt 这个不是 angular 的事情,所有框架都可以受益于 rxjs 。关于应用场景,我举一个例子:

    你有一个搜索栏,搜索学生信息。这个搜索功能提供 3 个 filter:关键词 、学生性别、页码 。

    这个时候,如果你想要任何一个筛选条件改变时,都重新获取数据,rxjs 只需要用一个 combineLatest 操作符。

    如果你想要当关键词和分页器页码改变时,才重新获取数据,你只需要 combineLatest 关键词和分页器页码,然后再 withLatest 学生性别筛选输入。

    rxjs 有很多操作符,每一个操作符都对应着常见的流的组合行为,每一个操作符都是由很多行代码写成的。
    所以,简单来说,rxjs 每一个操作符都能够替代你十行甚至几十行代码。这个也可以视作相对于 async/await 的优点。

    ---

    最后:rx 和 rxjs 来自于微软,来自于.Net ,来自于 System.Reactive.Linq. Shout out to Microsoft!
    djyde
        38
    djyde  
       2020-09-19 13:36:51 +08:00
    @peterjose #6
    @des #9

    能具体讲讲你们如何用 Rx 处理 WebSocket 问题吗?想了解一下
    peterjose
        39
    peterjose  
       2020-09-20 11:22:34 +08:00
    @djyde github 上有个库 就是这种很明显的流操作 非常简单
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   887 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:20 · PVG 06:20 · LAX 14:20 · JFK 17:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.