我在从回调中返回值时遇到了问题。我使用的是https://github.com/transducer/cljs-iota,它是IOTA javascript库的包装器。
我的代码是:
(defn find-transactions
"search transactions associated with an address and return a vector of hashes"
[]
(println "finding transactions")
(iota-api/find-transactions eff.views/iota-instance {:addresses (list comment-address)} find-callback)
)回调函数为:
(defn find-callback [err hashes]
(prn "transactions found" hashes)
hashes
)如果我这样做了
(.log js/console "result is" (find-transactions))回调打印到控制台:
"transactions found" ["JW9QTNHDLGQYKGHLYHWHYRKTTEVUVBZSHNMLCDLBWVYPROKTCDRAMFGXMIQCEM9YIRXUSZJTEKG999999" "UTJ9YBLCE9RJIERRBX9HFANUYFALKZJHAPXWHQKS9KQJEKUQOTLDTSCKAM9KIFPNRXSEJCHTUJT999999" "PYWIZA9JAIPDEQBTMHSXVSKOLYGSNSMVQKOBT9WXHEFLFYCKEVPPRMGQXCBMACKSGJDQKTCUZXH999999" "XJPCFXWELTKSNCCZQM9QNTFMSRMNAEJ9WJWQERLMDSHQTGGQQHKZRZRANGRRXXTGSUNBSDFDBAC999999" "WVQIPEZZUPYODYFO9KYAIEQYPTGIMKDXGRPGF9ADDVKGGMRFKKASXQLKATFDIJJPWLOPSPPYURDSA9999" "QYKZWELJYAMWPITSTZSXLFFERSGRPBKIOCHSE9KLENRXNBXSGSLBEYW9JUVJYP9QWBJJFKMSUDA999999"]这就是我想要的结果,但我得到了"result is" undefined。
我在这上面被阻塞了一整天,我不知道为什么我不能返回结果(例如,如果我试图返回"hello“,它也不起作用),我的函数工作,因为我得到了结果,但不能返回它……
如果有人有什么建议..。
发布于 2018-06-26 08:18:27
我已经回答了on reddit,但我将在这里为后人添加一个答案。
在回调风格的编程中,你得不到返回值。回调需要在某处产生某种效果,例如,通过改变原子、将某些内容放入core.async通道或解析promise (可能在promesa库的帮助下)。我更喜欢promises,但是ymmv。
(defn find-transactions
"search transactions associated with an address and return a promise for vector of hashes"
[]
(println "finding transactions")
(promesa/promise
(fn [resolve _reject]
(iota-api/find-transactions
eff.views/iota-instance
{:addresses (list comment-address)}
(fn [error hashes]
(if (error)
(reject error)
(resolve hashes)))))))
(-> (find-transactions)
(promesa/then (fn [result]
; do something here with result
))
(promesa/then (fn [error]
; do something with error
)))https://stackoverflow.com/questions/51025675
复制相似问题