首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何穷尽通道的值,然后返回结果(ClojureScript)?

如何穷尽通道的值,然后返回结果(ClojureScript)?
EN

Stack Overflow用户
提问于 2016-01-02 05:52:24
回答 3查看 1.1K关注 0票数 4

假设通道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
  )
)

结果: My REPL冻结,并最终输出一个巨大的错误。我逐渐意识到这是因为(go ...)块是异步的,因此立即返回。因此,我的(while ...)循环中的原子循环永远不会有机会被设置为nil,并且循环永远不会终止。

那么我该如何实现预期的结果呢?如果相关,我使用ClojureScript和目标nodejs。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34560423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档