rxjs 你们拿这个做什么 - V2EX
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 6682 次点击
    这是一个创建于 1925 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    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 就用了
    shakaraka
        12
    shakaraka  
    PRO
       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 。
    shakaraka
        28
    shakaraka  
    PRO
       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 的场子, 我不应该来的。哈哈
    shakaraka
        30
    shakaraka  
    PRO
       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     Solana     3973 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 05:26 PVG 13:26 LAX 21:26 JFK 00:26
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86