Clojure - core.async 变化元

Clojure - core.async vary-meta

我在 ClojureScript 中多次看到这样的代码:

(apply async/put! port (vary-meta val assoc :key *val*) args)

我不明白 vary-metaasync/put! 一起重复使用,为什么需要它?

例如 CircleCI frontend code and ninjudd/eventual

基本上他们使用 core.async 作为异步事件系统,并且他们在元数据中注释他们用于带有 id 的事件的值。

在 CircleCI 架构的情况下,他们使用它的目的之一是在输入控件控制的任何操作的结果完成(或错误或其他)时更新输入控件的状态。

您可以通过查看 forms namespace 了解其工作原理。 uuid 实例是在 wrap-managed-button-handler 的第 49 行创建的。您可以在 frontend.controls 命名空间中找到调用 release-button! 的事件处理代码示例。

当事件处理程序处理事件时,它们将 frontend.async/*uuid* 绑定到与事件值关联的 uuid,以便相关的多方法可以访问它。你可以在 frontend.core.

中看到这个

p.s。我尝试包含更多链接,但我在 Whosebug 上的声誉不够。