请在 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的上下文中是有意义的,它会执行任务但不干扰用户界面。
...