我希望使用ClojureScript中的Coinbase Bitcoin Exchange node.js API。
目标是在页面上复制第一个javascript示例:
var CoinbaseExchange = require('coinbase-exchange');
var publicClient = new CoinbaseExchange.PublicClient();
但在我的以下代码中,我首先尝试访问PublicClient
:
(ns plutus.core
(:require
[cljs.nodejs :as nodejs]))
(def coinb (nodejs/require "coinbase-exchange"))
(nodejs/enable-util-print!)
(defn -main [& args]
(def pc (js/PublicClient.)))
(println pc))
(set! *main-cli-fn* -main)
这会抛出一个ReferenceError: PublicClient is not defined
,虽然我也尝试过(以及类似的变化):
(def pc (. coinb (PublicClient)))
(def pc (.PublicClient coinb))
(def pc (:PublicClient coinb))
所有这些都因打印nil
而失败。我已经非常仔细地研究了this article任何相关的例子,但我对使用node.js如何影响事物的命名感到困惑,如果有的话。
答案 0 :(得分:1)
真的不是命名问题,更多的是关于如何在对象中使用new
嵌套属性。不幸的是,您无法在事后获得PublicClient
然后new
的引用。
(new (.-PublicClient coinb))
即使(.-PublicClient coinb)
返回一个函数,它也不起作用。
你需要在ClojureScript中使用它的点符号指向函数的位置:
(new coinb.PublicClient)
;; OR, more idiomatic
(coinb.PublicClient.)
那可以给你你想要的东西。
答案 1 :(得分:0)
还有人看到这个吗?
> ((.-getProducts (cb.PublicClient.)) (fn [_ _ _] nil))
#object[TypeError TypeError: self.makeRelativeURI is not a function]