【发布时间】:2016-01-01 21:52:24
【问题描述】:
假设频道chan 在队列中具有值“1”和“2”。
目标: 创建一个函数,该函数接受chan 并返回向量[1 2]。请注意,如果此函数必须在返回值之前阻塞一段时间,我完全没问题。
尝试:
(defn chan->vector
[chan]
(let [a (atom true) v []]
(while (not-nil? @a)
(go
(reset! a (<! chan))
(into v @a)
(reset! a (<! chan))
)
) v
)
)
结果:我的 REPL 冻结并最终吐出一个巨大的错误。我开始意识到这是因为 (go ...) 块是异步的,因此会立即返回。因此,我的(while ...) 循环中的原子永远不会被设置为nil,并且循环永远不会终止。
那么我怎样才能达到预期的效果呢?如果它是相关的,我正在使用 ClojureScript 并以 nodejs 为目标。
【问题讨论】:
标签: node.js clojure clojurescript