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!

如果有,您可以使用它们,如果没有,我想知道为什么不能,因为它们不是阻塞的,看起来它们在 JS 中也能实现。

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

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

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

像其他人说的那样,<!! 在 JavaScript 的上下文中没有意义,因为您从不希望阻塞主线程,而执行“等待”操作也需要这样做。

还有一个 take!,如果您不想自己实现轮询,它可以帮您做(更高效),当值可用时会调用您。

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

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