什么是

问题描述 投票:0回答:1

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)

asynchronous clojurescript
1个回答
0
投票

<!!在javascript中不存在,因为运行时不支持它。 Javascript是单线程的,<!!是阻塞操作。在基于浏览器的环境中阻塞主线程是一个坏主意,因为它将简单地冻结所有JavaScript操作(并可能冻结整个页面),直到取消阻止为止。

相反,请考虑像这样使用clojure.core.async/take!

(take! channel (fn [value] (do-something-with value)))
© www.soinside.com 2019 - 2024. All rights reserved.