Javascript React变量值未更改

Javascript React变量值未更改,javascript,reactjs,firebase,firebase-storage,Javascript,Reactjs,Firebase,Firebase Storage,我想做点什么反应,但我被卡住了。。我不知道为什么会这样,我无法解释自己 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?

我想做点什么反应,但我被卡住了。。我不知道为什么会这样,我无法解释自己

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行


谢谢

您的操作是异步的。这意味着“then”函数仅在getDownloadURL()完成时激发。但是当内容仍然为null时,console.log会立即激发。因此,如果您想对内容执行某些操作,应该在“then”回调中执行:

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

您的操作是异步的。这意味着“then”函数仅在getDownloadURL()完成时激发。但是当内容仍然为null时,console.log会立即激发。因此,如果您想对内容执行某些操作,应该在“then”回调中执行:

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

因为
content
null
?不,如果我像
let content='something'这样定义变量
,控制台日志将回显'something',但是如果我从
中控制台记录
url
,那么
函数,回显将是正确的。因为
内容
null
?不,如果我像
let content='something'这样定义变量
,控制台日志将回显“something”,但如果我从
中控制台记录
url
,那么
函数的回显将是正确的。是的,现在它工作了。但还有一个小问题,我怎样才能做到实时?例如,如果我从firebase控制台更改了一些值,我希望在不刷新页面的情况下显示项目中的内容。谢谢你的时间,亚历山大!对于实时操作,应该使用WebSocket而不是http请求。这里有一个很受欢迎的库,里面有演示和文档。是的,现在它可以工作了。但还有一个小问题,我怎样才能做到实时?例如,如果我从firebase控制台更改了一些值,我希望在不刷新页面的情况下显示项目中的内容。谢谢你的时间,亚历山大!对于实时操作,应该使用WebSocket而不是http请求。这里有一个很受欢迎的库,里面有演示和文档