请在 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!,如果您不想自己实现轮询,它会为您高效地执行,并在值可用时调用您。

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

它在使用Web Worker的情况下是有意义的,Web Worker执行任务而不会干扰用户界面。
...