首页 > 解决方案 > clojure(script) 最佳实践中的协程和处理异步?

问题描述

clojure 中似乎有无数的“协程”或异步逻辑的实现,Rich Hickey 和其他潜在权威关于此事的许多谈话都是从近十年前开始的,我正试图找出最新的以及处理此问题的最佳最佳实践方法。

对于这类事情,我最喜欢的抽象是 lua 协程,但我认为这些可能是一种严格的命令式做事方式,而我对函数式方式是什么有点困惑。

虽然在 lua 中使用协程非常简单易行:

A) 空闲等待 X 秒。

B)非忙等待变量或函数为特定值,例如true

A 可能可以使用 setTimeout 来实现,但 B 不能,至少我不知道怎么做。我也不确定 setTimeout 是解决这些类型问题的最佳做法吗?

标签: clojureclojurescript

解决方案


2013 年的博客文章中,Rich Hickey 描述了clojure.core.async. 虽然 JVM 有一些应用程序,但主要动机是给单线程 Javascript 环境带来线程的错觉。

所提供的“模拟多线程”clojure.core.async不如使用实际 JVM 线程(尤其是发生异常/错误时)健壮,因此它对 JVM Clojure 的用途有限。当Java 虚拟线程成为现实时,这将更加真实。

所以如果你在 ClojureScript 中,clojure.core.async总比没有好(即回调地狱)。然而,即使是 JS 也在考虑通过 WebAssembly 建立多线程模型clojure.core.async,因此将来 ClojureScript 可能存在替代方案。


推荐阅读