请在2024 Clojure 状态调查!中分享您的想法。

欢迎!请参阅关于页面以了解更多关于其运作方式的信息。

+1 投票
core.async
重新分类

为什么不支持在 cljs 中的 <!!?如果不存在很好的理由,增加 <!! 的支持不是很好吗?

2 答案

+1 投票

core.async 的 <!! 操作是阻塞的,并且会阻塞当前线程。在单线程 JavaScript 中这是不可行的。

那么从端口获取值的方法是什么呢?使用 go 和 <! 是有限的,因为 go 阻塞返回的是一个通道,而不是值。
您还可以与回调一起使用 `take!`。
在ClojureScript中“poll!”和“offer!”可用吗?

https://docs.clojure.org/clojure.core.async/poll!
https://docs.clojure.org/clojure.core.async/offer!

如果是这样,您可以使用这些方法,如果不是,我不禁想知道为什么,因为它们不是阻塞的,似乎也可以在JavaScript中实现。

编辑:它们是!
> 在单线程JavaScript中,这不可行。

但使用Web Worker中的它是合理的。
0 投票

您可以使用poll!offer!代替,它们是非阻塞的等效。只需牢记,它们不会“等待”值变得可用,因此您需要自行轮询,或者确保应该有一个。

就像其他人说的,<!!在JavaScript的上下文中没有意义,因为您从不想阻塞主线程,为了执行“等待”操作,它也必须这样做。

还存在take!,如果您不想自己实现轮询,它可以为您完成(更有效地),当值可用时,它会回调您。

by
><!! 在JavaScript的上下文中没有意义,因为你永远不想阻止主线程

在使用Web Worker的上下文中是有意义的,因为Web Worker可以执行不干扰用户界面的任务。
...