2017-08-12 20 views
0

私はリアクションで何かをしようとしていますが、私は立ち往生しています..なぜこれが起きているのか分かりません。リアクション変数の値が変更されていません

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';'のような変数を定義すると、コンソールログは何かをエコーし​​ますが、 'then'関数から' url'をログアウトすると、エコーは正しいでしょう。 –

答えて

2

あなたの行動は非同期です。これは、getDownloadURL()が終了したときにのみ 'then'関数が起動することを意味します。しかし、コンテンツがまだヌルである場合、console.logは即座に起動します。だから、コンテンツで何かしたいのなら、それを 'then'コールバックの中で行うべきです:

+0

イェップ、今はうまくいきます。しかし、別の小さな質問、私はリアルタイムですることができますか?たとえば、Firebaseコンソールから値を変更した場合、ページを更新せずにプロジェクトを表示することができます。あなたの時間をありがとう、アレクサンダー! –

+0

リアルタイムアクションの場合は、http要求の代わりにwebsocketを使用する必要があります。デモやdocs https://socket.ioで人気のあるライブラリです –

関連する問題