Firebase-如何从不同位置获取数据?

时间:2019-01-14 13:07:20

标签: javascript firebase firebase-realtime-database redux

我的看板Web应用程序具有这样的数据结构:

boards 
     -boardid
           author: 'abc'
           container: 
                 -containerid1 (//generated by push)
                         title: 'Column1'
                         type: 'common'
                 -containerid2
                         title: 'Column2'
                         type: 'common'
                 -containerid3:
                         title: 'Column3'
                         type: 'individual'
                         userId:'....'

cards:
    - containerid1
               - cardid1: //generated by push
                     title: 'card1'
               - cardid2:
                     title: 'card2'
    - containerid3:
               - cardid3:
                     title: 'card3'

基本上,在板上我只存储每个容器的常规数据,例如标题,类型等。...最后我想要的是容器数组,并且每个容器都有一个纸牌数组:

[{id:'containerid1',
  title: 'Column1', 
  cards: [{id:'cardid1', title:'card1'}, {id:'cardid2', title:'card2'}]}
 {...},
 {...}]

我正在使用react redux来获取我的容器数据,但是我无法一次获取卡片数据。

const fetchContainers = (boardId) => dispatch => {
    return FirebaseRef.child(`boards/${boardId}/containers`).on('value', (snapshot) => {
        const containers = []
        snapshot.forEach((childSnapshot) => {
            const containerId = childSnapshot.key
            const cards = []
            FirebaseRef.child(`cards/${containerId}`).on('value', snap => {   
                if (snap.exists()) {
                    snap.forEach(snapCard => {
                        cards.push({
                            id: snapCard.key,
                            ...snapCard.val()
                        })
                    })              
                }
                containers.push({
                    id: containerId,
                    ...childSnapshot.val(),
                    cards
                })
                dispatch({
                    type: FETCH_CONTAINERS,
                    containers
                })
            })
        })
    })
}

返回的是一个空的容器数组。 但是当我放置

                containers.push({
                    id: containerId,
                    ...childSnapshot.val(),
                    cards
                })
                dispatch({
                    type: FETCH_CONTAINERS,
                    containers
                })

FirebaseRef.child('card ... 我能够获取容器的常规数据,但是带有空的卡数组:

[{id:'containerid1',
  title: 'Column1',
  cards: [] // empty here}
 {id:'containerid2' ....]

更新:

我解决了我的问题。我无法访问路径“卡”的位置,因此它始终返回null。我忘了在Firebase中设置规则,因为我一开始并不熟悉Firebase。大错误!

0 个答案:

没有答案