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

欢迎!请查看 关于 页面以获取更多关于这一点的工作方式的信息。

+1
core.async
重新分类

为什么不支持 <!!,有很好的理由吗?如果没有,添加对 <!! 的支持不是很好吗?

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!,它们是非阻塞的等价替代品。请注意,它们不会“等待”值可用,因此您需要自己继续轮询,或者确保应该有一个。

正如其他人所说的,`

还存在着 take!,如果您不想自己实现轮询,它将为您(更有效地)完成这项工作,并在值可用时通过它来调用您。

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

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