【问题标题】:Clojure - core.async vary-metaClojure - core.async 变化元
【发布时间】:2015-09-24 21:49:59
【问题描述】:

我在 ClojureScript 中反复看到过这样的代码:

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

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

例如在CircleCI frontend 代码和ninjudd/eventual 中看到。

【问题讨论】:

  • 你能链接到你看到这个的地方吗?只是为了让问题更完整

标签: clojure clojurescript core.async


【解决方案1】:

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

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

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

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

附言我试图包含更多链接,但我在 stackoverflow 方面没有足够的声誉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 2019-02-13
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-27
    相关资源
    最近更新 更多