2017-08-12 104 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 –