2016-09-27 10 views
1

letブロックのJavascriptの約束の解決済み戻り値(この場合はjsonオブジェクト)をバインドするにはどうすればよいですか?私が得るすべては、例えば#object[Promise [object Promise]]ClojureScriptで解決されたJavascriptの値をバインドする方法

です:あなたがバインドすることはできません

(let [prop (.then (fn-that-returns-a-js-promise) #(.-prop %))] (print prop)) 

プリント#object[Promise [object Promise]]

答えて

0

:ながら

(.then (fn-that-returns-a-js-promise) #(print (.-prop %))) 

は、コンソールにpropの値を出力しますそれ。

(.then (fn-that-returns-a-js-promise) #(.-prop %)) 

戻り値javascript Promise。約束事のすべての操作は新しい約束を返し、あなたのプログラムの論理はその約束の文脈の中で実行され、それをエスケープすることはできません。

+0

しかし、印刷すると明らかにそれを強制しますか? – mac

+1

@mac '.then(fn)'の戻り値は、あなたが渡した関数にかかわらず、常にPromiseです。これはClojureScriptではなく、JavaScriptの「制限」です。 –

+0

最初の式では、printはpromiseと呼ばれ、元の約束が解放されると実行されます(印刷されます)。あなたの2番目の表現は、その価値ではなく約束を表示します。値は、約束自体からアクセスすることができます –

関連する問題