2016-09-27 46 views
1

如何在let塊中綁定javascript promise的已解析返回值(本例中爲json對象)?我得到的是一個#object[Promise [object Promise]]如何在ClojureScript中綁定Javascript承諾的解析值

例如:

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

打印prop到控制檯的價值,同時:

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

打印#object[Promise [object Promise]]

回答

0

您不能綁定它。

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

return javascript Promise。承諾上的每個操作都會返回新的承諾,並且您的程序邏輯在承諾的上下文中執行,您無法逃避它。

+0

但打電話打印顯然強迫它? – mac

+1

@mac'.then(fn)'無論你傳遞給它的是什麼函數,返回值總是一個Promise。這是JavaScript的「限制」,而不是ClojureScript。 –

+0

在你的第一個表達式中,打印被稱爲_inside_諾言,並且一旦原始諾言被釋放,它就會被執行(打印)。你的第二個表達只是打印承諾,而不是它的價值。該價值可以從承諾本身 –