go块返回一个通道而不是返回值,所以当cljs没有<!!
时,如何提取go块中的返回值?
例如,给出以下代码:
(go (let [response (<! (http/get "https://api.github.com/users"
{:with-credentials? false
:query-params {"since" 135}}))]
(:status response)))
将返回一个通道,但不返回(:status response)
。如何使此go块返回(:status response)
?
<!!
在javascript中不存在,因为运行时不支持它。 Javascript是单线程的,<!!
是阻塞操作。在基于浏览器的环境中阻塞主线程是一个坏主意,因为它将简单地冻结所有JavaScript操作(并可能冻结整个页面),直到取消阻止为止。
相反,请考虑像这样使用clojure.core.async/take!:
(take! channel (fn [value] (do-something-with value)))