####作っているもの
FirebaseのDatabaseとStorageを用いた伝言板Webシステム
####やりたいこと
データベースのchild_addedイベントで、
- Databaseからメッセージを取得
- Storageからユーザーのアイコンのurlを
getDownloadURL()
で取得
####困っていること
child_addedでデータを取得している順番と、処理が完了する順番が異なるため、伝言を時系列に並べられません。
なお、データはref.push()
で追加しています
コンソールに処理開始と処理完了を記録すると、このようになります。
####備考
- user.photoURLを使用すると、ユーザーがアイコンを変更したときに、アイコンのurlが取得できないため、あえてstorageからurlを取得しています。
- 上記が起こっている現象は、child_addedイベントのコールバック処理内で、storageからurlを取得する非同期処理を行っていることが原因だと考えていますが、'ref.on'はthenableでないので、ワークアラウンドのやり方がわかりません。
####コード
javascript
1ref.on('child_added', (data) => { 2 console.log(data.key + ' start'); 3 // データを取得 4 5 // ユーザーの画像をstorageから取得 6 var ref = firebase.storage().ref('user-photo/' + uid); 7 ref.getDownloadURL().then(url => { 8 // tableの行をデータに基づいて追加 9 console.log(data.key + ' end'); 10 11 }).catch(error => { // ユーザーの画像がない 12 // tableの行をデータに基づいて追加 13 console.log(data.key + ' end'); 14 }); 15})
よろしくお願いします。
あなたの回答
tips
プレビュー