2024 年 Clojure 州调查! 分享您的想法。

欢迎!有关如何使用本站的信息,请参阅 关于 页面。

+1

为什么不支持 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 的上下文中才有意义,Web Worker 可以在不干扰用户界面的情况下执行任务。
...