欢迎!请参阅关于页面,了解更多有关此功能的信息。
转换器函数的完成阶(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中这些地方被调用: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发表:
我可以证实我也遇到了这个问题,并对这种行为感到惊讶。