在通道中,转换器函数的完成度(1)被调用两次
`
(let [xf (fn [rf]
(fn
([] (println "INIT") (rf))
([result] (println "COMPLETING") (rf result))
([result input] (println "STEP") (rf result input))))
c (chan 10 xf)]
(close! c)
(println "结果" (<!! c)))
`
将打印
COMPLETING COMPLETING 结果 nil
根据https://clojure.org/reference/transducers,这可能是错误
完成过程必须在最终累积值上正好调用一次完成操作
看起来在 core.async 中完成函数在以下地方被调用:[链接](https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L122) [链接](https://github.com/clojure/core.async/blob/master/src/main/clojure/cljs/core/async/impl/channels.cljs#L146)