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!,如果您不想自己实现轮询,它会为您做(更有效),当值可用时会通过回调来调用您。

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

在使用 Web Worker 的语境中是有意义的,因为 Web Worker 可以执行任务而不干扰用户界面。
...