- 从视图往远程请求的这个方向,订阅关系是一条直线
- 从远程请求回来的这个方向,订阅关系可能是个网
如果在这个情况下,非要把它们链式写成一个流,往往带来可维护性的负担。可以考虑把它断成两节,上一半只管写,下一半只管读。从写的方向看,一条线到底,拿到结果,无论正常、异常,是否有 pending,都一起写入下面这些流的起始点;从读的方向看,对于任意一个起点,都可能看得到它往视图方向的整个树,从视图方向看,任何一个视图的组合订阅,又都可以看得到往数据层的整个订阅树。虽然这是个网,但看上去也是非常清晰的,可维护性也比较好。
问:那么,一次性和管道流的含义又分别是什么?
所谓一次性,是指非可重复的事情,比如单次的网络请求,通常,你会用 Promise 表达,但对于一个掌握了 RxJS 基本用法的人来说,身怀利器,杀心自起,你会倾向于把原先用 Promise 表达的东西全部换成 RxJS,比如一个简单的 xxx.then,你就要想把它变成 mergeMap,其实这是不必要的。
Future 和 Stream,没有必要在中间步骤上做融合。如果你有一个多级的不涉及外部状态变更的连续请求,应当先用 Promise 搞成串,然后整体与流结合,不需要把串里面的每一段都用流来表达。
有一个简单的办法控制内心欲望,那就是不让代码中出现 Promise,尽可能不要 then,而是用 await 表达这些东西,封装成 async 函数,这样,整体与 Stream 结合就不会有违和感。
总的来说,如果你的目的只是用 RxJS 来做数据流管理,那其实可以只用里面几个比较常用的操作符,适当克制自己的欲望,这样整个代码的可维护性会比较好。
问:这个读写分离的机制,有些像 Redux 了,那为什么叔叔一直对 Redux 这么深恶痛绝呢?
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。