欢迎!请参阅关于页面以获取更多有关此功能的信息。
转换器函数的完成度(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 "RESULT" (<!! c))) `
将打印
COMPLETING COMPLETING RESULT nil
根据https://clojure.org/reference/transducers,这可能是错误
完成过程必须在最终累积值上精确调用一次完成操作
看起来在core.async中完成fn在这些地方被调用: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
评论者:jwr
我可以确认我也遇到过这种情况,对此行为感到惊讶。