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

欢迎!请参阅 关于 页面以获取更多此功能的信息。

+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的上下文中很有意义,因为它可以在不干扰用户界面的情况下执行任务。
...