【发布时间】:2014-07-31 15:24:17
【问题描述】:
我正在尝试通过在每次表单更改时向验证函数发出请求来使用 core.async 验证表单。验证函数本身是异步的。它访问外部服务并返回错误消息数组或空数组。
(go-loop []
(when-let [value (<! field-chan)]
(go (let [errors (<! (validate value))]
(put! field-error-chan errors)))))
上面的代码是我目前所拥有的。它在大多数情况下都有效,但有时来自服务器的响应时间会发生变化,因此第二个请求在第一个请求之前到达。如果该值在第二种情况下无效,但在第一次有效时,我们将从 field-error-chan 中提取一个错误数组,然后是一个空数组。
我当然可以将验证从 go 循环中取出,并让所有内容以正确的顺序返回,但是,我最终会在检查错误后才从 field-chan 中获取值。我想做的是在值出现时对其进行验证,但将验证响应按照值出现的顺序而不是响应的顺序放在错误通道上。
如果不是,core.async 是否可以做到这一点,我获得有序响应的最佳方法是什么?
谢谢
【问题讨论】:
-
验证是否会重新生成将写入错误的通道?您能否详细介绍一下验证的工作原理?
标签: clojure clojurescript core.async