Redux Thunk Firebase - 获取数组

Redux Thunk Firebase - fetch arrays

我正在使用 redux、react-redux、redux-thunk 构建一个 React Native 应用程序,并使用 firebase 作为后端。

我的数据库是非规范化的,所以我必须在 firebase 引用中获取键,对于每个键,我需要从另一个引用中获取数据。

使用 firebase .once('value') 我得到了这样的结果:

const fetchPosts = ( uid ) => {
    return ( dispatch ) => {

         dispatch(postsIsFetching())

         const userPostsRef = firebase.database().ref('users/' + uid + '/myposts')

         var keys = []
         //
         userPostsRef.once('value').then(snap => {

             snap.forEach(post => keys.push(post.key))

         }).then(() => {

         keys.forEach(key => {

             const postRef = firebase.database().ref('posts/' + key )

             postRef.once('value').then(snap => {
                 var newPost = {
                            title: snap.val().title,
                            user: snap.val().user
                            }
                 dispatch(setPost(newPost))
             })

        })

     }
}

但这不是实时更新,因为.once()方法只读取一次数据。 .on() 方法没有 return Promise,那么我该如何解决呢? 使用 redux-thunk 和非规范化的 firebase 数据库获取数据的最佳模式是什么?

谢谢大家

将通常放在 .then() 中的代码放入 .on() 回调中。这样,每次刷新数据时,都会调度您的 setPost 操作。

例如:

...
postRef.on('value', snap => {
    var newPost = {
        title: snap.val().title,
        user: snap.val().user
    }
    dispatch(setPost(newPost))
});

您可能希望保留该数据库引用,以便以后 stop listening