rxjs 你们拿这个做什么

2020-09-17 20:12:21 +08:00
 soulmt

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

6100 次点击
所在节点    JavaScript
39 条回复
wangxiaoaer
2020-09-18 10:11:26 +08:00
@ddup 举个例子?不是抬杠。
soulmt
2020-09-18 11:53:43 +08:00
@tsvico 你们的技术栈是什么? 什么情况下需要在业务里面订阅消息。
soulmt
2020-09-18 11:54:28 +08:00
@des 没用过 websocket 不过 socket 推送和 rxjs 的订阅 仿佛是个不错的组合。
soulmt
2020-09-18 11:55:04 +08:00
@wunonglin 你们技术栈是什么,什么业务用。怎么香
soulmt
2020-09-18 12:03:03 +08:00
@siweipancc 后端有各种消息,大量的数据处理,前端这边就比较少了吧,前端我更多的是业务逻辑上的,
soulmt
2020-09-18 12:05:22 +08:00
@rrfeng 这确实也是个场景,不同的 入口或者流程但是 最终的结果是一致的,并且互相不能影响如果用 js 的话可能要维护各种状态来做控制了
soulmt
2020-09-18 12:07:31 +08:00
@leemove 害 难怪我不知道怎么用 你们用的 sockect angular 我都没用过,只是最近在写 cli 的时候遇到了 rx 然后发现很吊,想运用到业务中,发现好像没什么容身之处,可能是我对 rxjs 没有深刻认知导致的。 目前的技术栈 react 。
wunonglin
2020-09-18 12:08:30 +08:00
@soulmt #24 angular 。在能用 rxjs 的时候就基本不会用 promise 了,流式异步简直不要太爽
soulmt
2020-09-18 12:12:25 +08:00
@wunonglin 晓得了,angular 的场子, 我不应该来的。哈哈
wunonglin
2020-09-18 12:18:54 +08:00
@soulmt #29 就算三大框架都不用也能用 rxjs,现在写些小页面都用这做事件订阅之类的了,总之就是好处多多
gzf6
2020-09-18 13:45:55 +08:00
rx 不光是 rxjs 了,这种模式已经有好多语言的实现了,可以了解下
ddup
2020-09-18 14:12:10 +08:00
@wangxiaoaer #21 用 RxJs 的话,需要配合 TypeScript 有完善的智能提示,这样体验更好,我用的是 Angular,不过即使是 Vue 也是一样可以很方便的和 RxJs 结合的。

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


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

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

感觉你说的 promise 好像都可以实现,不知道是否可以说说它和 promise 对异步处理的优劣点
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
2020-09-19 13:36:51 +08:00
@peterjose #6
@des #9

能具体讲讲你们如何用 Rx 处理 WebSocket 问题吗?想了解一下
peterjose
2020-09-20 11:22:34 +08:00
@djyde github 上有个库 就是这种很明显的流操作 非常简单

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/708054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX