我遵循了这篇文章来尝试CLJS,但想知道如何等待顶级go块,问题出现在在REPL中评估go块时,返回代码#object[cljs.core.async.impl.channels.ManyToManyChannel]
。
编译成文件后,通过node target/main.js
执行,似乎顶级go块被阻塞,等待执行。
我觉得这两种执行方式之间的差异可能与go的 实现 或事件循环的工作方式有关,但无法确定。
(go ;; how to wait this ??
(let [browser (<! (u/new-browser))
page (<p! (.newPage browser))]
(try
(<p! (.goto page "https://clojure.org"))
(<p! (.screenshot page #js{:path "./target/screenshot.png"}))
(catch js/Error err
(println (ex-cause err)))
(finally (<p! (.close browser)))))) ;; eval here return ManyToManyChannel
(defn new-browser [& {:as opts}]
(let [pp-opts (-> opts
(update :user-data-dir #(or % (str home-dir "/pp")))
(clj->js :keyword-fn csk/->camelCase))]
(go (<p! (.launch puppeteer pp-opts)))))