2017-08-12 110 views
0

我試圖做一些反應,我卡住了..我不知道爲什麼會發生這種情況,我無法解釋我自己。React變量值不會改變

let content = null; 
storage.ref().child(snapshot.val().content).getDownloadURL().then(url => content = url); // setting value 

console.log('content', content); // returns initial value, in my case, null. why? 

線19

https://pastebin.com/UkJyJihB

謝謝!

+0

因爲'content'是'null'? –

+0

不,如果我定義變量'let content ='something';',控制檯日誌會回顯'something',但是如果我從'then'函數登錄'url',回顯將是正確的。 –

回答

2

您的操作是異步的。這意味着'then'函數只有在getDownloadURL()完成時纔會觸發。但是,當內容爲空時,console.log會立刻引發火災。所以,如果你想要做什麼內容,你應該這樣做內「那麼」回調:

let content = null; 
storage.ref().child(snapshot.val().content).getDownloadURL() 
.then(url => { 
    content = url; 
    console.log('content', content); 
}); 
+0

Yeap,現在它正在工作。但是另一個小問題,我如何能夠實時進行?例如,如果我從Firebase控制檯更改某個值,我希望在我的項目中顯示而不刷新頁面。謝謝你的時間,亞歷山大! –

+0

對於實時操作,您應該使用websockets而不是http請求。這裏是流行的圖書館與演示和文檔https://socket.io –