我在ClojureScript中多次看到这样的代码:
(apply async/put! port (vary-meta val assoc :key *val*) args)我不明白vary-meta和async/put!的反复使用,为什么需要它?
例如,在CircleCI前端代码和九月份/最终中可以看到。
发布于 2015-09-25 02:43:24
基本上,他们使用core.async作为异步事件系统,并且在元数据中用id注释用于事件的值。
在CircleCI体系结构中,当它控制的任何操作的结果完成(或错误或其他什么)时,他们使用它来更新输入控件的状态。
通过查看窗体命名空间,您可以看到这是如何工作的。uuid实例是在第49行中在包装管理按钮处理程序中创建的。您可以找到在release-button!命名空间中调用frontend.controls的事件处理代码的示例。
当事件处理程序处理事件时,它们将frontend.async/*uuid*绑定到与事件值关联的uuid,以便相关的multimethod能够访问它。您可以在frontend.core中看到这一点。
附注:我试图包括更多的链接,但我没有足够的声誉与堆叠溢出。
https://stackoverflow.com/questions/32771500
复制相似问题