首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从javascript回调返回值

从javascript回调返回值
EN

Stack Overflow用户
提问于 2018-06-25 22:18:25
回答 1查看 293关注 0票数 1

我在从回调中返回值时遇到了问题。我使用的是https://github.com/transducer/cljs-iota,它是IOTA javascript库的包装器。

我的代码是:

代码语言: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)
          )

回调函数为:

代码语言:javascript
复制
(defn find-callback [err hashes]
          (prn  "transactions found" hashes)
          hashes
    )

如果我这样做了

代码语言:javascript
复制
(.log js/console "result is" (find-transactions))

回调打印到控制台:

代码语言:javascript
复制
"transactions found" ["JW9QTNHDLGQYKGHLYHWHYRKTTEVUVBZSHNMLCDLBWVYPROKTCDRAMFGXMIQCEM9YIRXUSZJTEKG999999" "UTJ9YBLCE9RJIERRBX9HFANUYFALKZJHAPXWHQKS9KQJEKUQOTLDTSCKAM9KIFPNRXSEJCHTUJT999999" "PYWIZA9JAIPDEQBTMHSXVSKOLYGSNSMVQKOBT9WXHEFLFYCKEVPPRMGQXCBMACKSGJDQKTCUZXH999999" "XJPCFXWELTKSNCCZQM9QNTFMSRMNAEJ9WJWQERLMDSHQTGGQQHKZRZRANGRRXXTGSUNBSDFDBAC999999" "WVQIPEZZUPYODYFO9KYAIEQYPTGIMKDXGRPGF9ADDVKGGMRFKKASXQLKATFDIJJPWLOPSPPYURDSA9999" "QYKZWELJYAMWPITSTZSXLFFERSGRPBKIOCHSE9KLENRXNBXSGSLBEYW9JUVJYP9QWBJJFKMSUDA999999"]

这就是我想要的结果,但我得到了"result is" undefined

我在这上面被阻塞了一整天,我不知道为什么我不能返回结果(例如,如果我试图返回"hello“,它也不起作用),我的函数工作,因为我得到了结果,但不能返回它……

如果有人有什么建议..。

EN

回答 1

Stack Overflow用户

发布于 2018-06-26 08:18:27

我已经回答了on reddit,但我将在这里为后人添加一个答案。

在回调风格的编程中,你得不到返回值。回调需要在某处产生某种效果,例如,通过改变原子、将某些内容放入core.async通道或解析promise (可能在promesa库的帮助下)。我更喜欢promises,但是ymmv。

代码语言:javascript
复制
(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
                    )))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51025675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档