- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在将 Clojure 的 core.async 与所谓的 Reactive Extensions (Rx) 和 FRP 进行比较时,我似乎有点困惑一般的。他们似乎解决了类似的异步问题,所以我想知道主要区别是什么,以及在什么情况下更喜欢其中一种。有人可以解释一下吗?
编辑:为了鼓励更深入的答案,我想让问题更具体:
Core.async 允许我编写看起来同步的代码。然而,据我了解,FRP 仅需要一层嵌套回调(所有处理逻辑的函数都作为参数传递给 FRP API)。这似乎两种方法都使得回调金字塔变得不必要。确实,在 JS 中我必须多次编写 function() {...}
,但主要问题,即嵌套回调,在 FRP 中也消失了。我说得对吗?
“FRP通过控制流完成消息的通信”您(某人)能给出更具体的解释吗?
我不能像传递 channel 一样传递 FRP 的可观察端点吗?
总的来说,我了解这两种方法的历史来源,并且我在这两种方法中都尝试过一些教程。然而,我似乎因差异的不明显性而“瘫痪”。是否有一些代码示例很难用其中一个编写而使用另一个很容易?其架构原因是什么?
最佳答案
我认为主要问题是您对所解决问题的假设并不完全如此,因为它们都没有解决异步“问题”。
FRP
的主要思想是更改的传播,请考虑完成与 Excel 相同的操作,即在级联中定义相互依赖的单元格,并且当一个单元格更改时,级联上的所有依赖单元都会重新计算。
core.async
主要思想是系统分解,可以认为是在 core.async
中的不同进程中间使用 queue
来分离关注点> 案例而不是队列,您有 channel ,但您明白了。
因此,删除金字塔代码并不是这两种技术的目标,它们在不同的抽象层上运行。
完成通信和流量控制的思路取自the original core async post .
While there are various mechanisms to make events/callbacks cleaner (FRP, Rx/Observables) they don't change their fundamental nature, which is that upon an event an arbitrary amount of other code is run, possibly on the same thread, leading to admonitions such as "don't do too much work in your handler", and phrases like "callback hell".
换句话来说,如果事件处理程序中有业务域代码,那么您就已经完成了X 事件处理以及X 发生时要做什么强>.
这就是 core.async 解决的问题,因为在中间引入队列/ channel 有助于更好地分离关注点。
有关回调和将可观察端点作为参数传递的所有问题都只是实现问题,它实际上取决于 Rx
实现和 API。
如果你看React reusable components你确实没有看到太多的回调 hell ,并且你明白了传递可观察量的想法。
即使Rx
可用于对任何数据流进行建模,但更常用于UI渲染(a-la Excel),以简化在您更新 View 时的更新方式模型更改。
另一方面,当任意两个子系统相互通信时,Core.Async
可用于建模关注点分离(与队列相同的使用场景),在 UI 渲染上使用它链的主要思想是分离:
因此,您可以将 core.async
和 FRP
放在一起,因为 core.async
将分离关注点,而 FRP
code> 将在模型更新后定义级联数据流。
关于asynchronous - 比较 core.async 和函数响应式编程 (+Rx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20632512/
我用 Cocoapods 创建了一个简单的项目并安装了 RxSwift 和 RxCocoa。 我写了这段代码: import UIKit import RxSwift class ViewContro
我对 Rx 真的很陌生,只是想知道 subscribeOn 的顺序如何影响 Observable //This will not print anything Observable.just("wha
我有一个 PublishSubject 每 X 秒发出一个信号,我想只考虑 Y 秒后发出的第一个项目。 例子 observable A 每秒发出一次“滴答声” observable B 应该每 5 秒
我有以下流。 Observable.just(Unit) // execute immediately .mergeWith(tryAgainRelay) // execute again w
我可以看到 RX 适用于 Android 和 UI 事件处理。我很难看到 RX 在后端提供了什么好处。 RX Java 是为后端处理而设计的,还是这个概念太过分了? 最佳答案 实际上,RxJava 最
我有一个关于什么是更好的 RxJava 模式以保持可观察状态的问题。 为简单起见,假设我们有一个 StateManager需要跟踪系统中某个状态(假设它是一个简单的 bool 标志)并以可观察的方式公
我遇到了以下问题。我有一个从具有 isMember 属性的服务器请求的基本对象。如果该属性为 true,我想向端点 1、2 和 3 发出请求。 如果该属性为 false,我只想向端点 1 发出请求。
我正在使用 RxJava,但也许能够翻译另一个实现的答案。 我有一个 Observable 发出一系列项目,我想将它们分成 10 组。如下所示: observable .buffer(10)
有没有办法计算 RxAndroid 中流中已处理的元素数量? 我有类似的事情: Observable.fromArray(new String[]{"these", "are", "my", "val
如果我的客户端断开连接(错误)超过 10 秒,我会尝试显示一个弹出窗口。但是,当重新连接时,我也会关闭弹出窗口(true)。如果为真,我需要立即关闭弹出窗口。 我认为我需要做的是根据值(假)进行去抖,
收到 onNext() 后如何自动退订? 现在我使用这个代码: rxObservable .compose(bindToLifecycle()) // unsubscribe automaticall
我在 Ettus x310 上有一个简单的 C++ 测试程序,以前可以用,但现在不行了。我试图简单地设置单个 USRP 的两个 channel 的两个中心频率。当我尝试在第二个 channel 上设置
我有一个返回 Observable 的网络调用,我有另一个网络调用,它不是依赖于第一个 Observable 的 rx,我需要以某种方式转换这一切都与 Rx 相关。 Observable respon
我正在尝试根据 Rxjava 中的某些条件创建组列表。 以下是我的回复: { "dates":[ { "date":18, "value":
RX 6800 XT是最近很强的一款显卡,让很多的用户都很喜爱,详细还有很多没有入手的用户对他不是很了解吧,下面就带来了RX 6800 XT评测、跑分、价格、参数、图片,快来一起看看吧。 RX
我有一个重复元素列表,比如: Observable source = Observable.just("A", "B", "A", "C", "C", "A"); 我想按它们的值以及它们出现的次数对它
如果我将 RX-main 包添加到 WPF 应用程序,我会安装以下依赖包: 接收接口(interface) 接收核心 Rx-Linq Rx 平台服务 主要接收 添加 Rx-main 后,可以安装两个与
com.myapp.test.debug E/MessageQueue-JNI:rx.exceptions.OnErrorNotImplementedException 在 rx.Observable
这个问题在这里已经有了答案: RxJava operator that emits if different from last (1 个回答) 关闭 5 年前。 我有一个 bool 型 Obser
首先,我在两个 shell 中同时运行 vnstat -tr -i eth0 和 iftop。奇怪的是,vnstat 中的 rx 比 iftop 中的峰值 rx 大得多。我该如何解决这个问题? vns
我是一名优秀的程序员,十分优秀!