いつもお世話になっております。
FirebaseのReal Time DatabaseからFire Storeへの移行を試みています。
これまで、itemを保存する際にuserIdを一緒に保存していて、ユーザー情報をFetchする際には、下記のようなやり方を取っていました。
JavaScript
1export const itemsFetch = () => { 2 return (dispatch) => { 3 firebase.database().ref(`/items/`) 4 .once('value', snapshot => { 5 const items = snapshot.val(); 6 return items; 7 }) 8 .then(items) => { 9 const userPromises = _.map(items.val(), async (item, itemId) => { 10 return firebase.database().ref(`/users/${item.userId}`).once('value') 11 .then(snapshot => snapshot.val()) 12 .then(user => ({...item, user, itemId})); 13 }); 14 dispatch({ type: 'ui/loading/hide' }); 15 return Promise.all(userPromises); 16 }) 17 .then(itemItems => { 18 dispatch({ type: 'items_fetch_success', payload: itemItems }); 19 }); 20 }; 21};
表示する際にはitem.user.name
などで表示することができました。
エラー
TypeError: relativePath.split is not a function
同様のやり方を採用して、下記のようなソースコードを描いてみたのですが途中のエラーに引っかかってしまいます。。
ソースコード
JavaScript
1export const itemsFetch = () => { 2 return (dispatch) => { 3 firebase.firestore().collection('items').get() 4 .then((snapshot) => { 5 const items = snapshot.docs.map(doc => doc.data()); 6 return items 7 }) 8 .then((items) => { 9 const userPromises = items.map((item, itemId) => { 10 const userId = item.userId; 11 console.log('userId: ', userId); 12 return firebase.firestore().collection('users').get(userId) 13 .then((snapshot) => { 14 console.log('snapshot:', snapshot); 15 const user = snapshot.docs.data(); 16 return user; 17 console.log('user:', user); 18 }) 19 .then(user => ({...item, user: user, itemId})); 20 }); 21 dispatch({ type: 'ui/loading/hide' }); 22 return Promise.all(userPromises); 23 }) 24 }; 25};
ここでいう、itemとuserIdは間違いなく表示されているのですが、その次のuserコレクションから引っ張ってくることに失敗しているみたいです。
snapshotの部分を試行錯誤してみて、なんとか次を表示しようと頑張っているのですが今回のエラーが出てしまい解決できていません。
おたすけくださいませ。
追記
return firebase.firestore().collection('users', '==', userId).get()
ユーザーidを合わせてみることをしてみましたが、やはり取ることはできませんでした。
追記
get()の中にuserIdを入れることで、snapshotに正常な値が入るようになったのですが、今度は下記のエラーでつまってしまっています。。
Error: Query.get failed: First argument must be an object.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/18 13:59