使用与core.async的绑定是否可以?我使用的是ClojureScript,因此core.async非常不同。
(def ^:dynamic token "no-token")
(defn call
[path body]
(http-post (str host path) (merge {:headers {"X-token" token}} body)))) ; returns a core.async channel
(defn user-settings
[req]
(call "/api/user/settings" req))
; elsewhere after I've logged in
(let [token (async/<! (api/login {:user "me" :pass "pass"}))]
(binding
[token token]
(user-settings {:all-settings true})))
答案 0 :(得分:2)
在ClojureScript 1 中,binding
基本上是with-redefs
,另外还要检查所涉及的Vars是否标记为:dynamic
。另一方面,go
被安排在块中执行 1 (也就是说,它们可能被“停放”并且稍后恢复,并且go
块之间的交错是任意的)。这些模型根本不能很好地融合。
简而言之,不,请改为使用显式传递的参数。
1 Clojure中的细节有所不同,但结论仍然相同。
2 使用尽可能快的机制setTimeout
,如果没有更好的可用时间,则为0。