[TypeError]:Firebase orderByChild无效

时间:2018-04-23 23:05:38

标签: javascript firebase firebase-realtime-database

我试图查询我的数据库,以便它根据每个子键检索一个有序列表。我这样做(见下文),但是" TypeError"发生。使用.on('value', snapshot =>时,这是随机排序的。我无法解决这个问题,你们有什么想法可以实现吗?

错误

  

TypeError:在此环境中,assign的源必须是一个对象。此错误是性能优化,不符合规范。

实时数据库查询

RealtimeDatabase Query

源代码



export const messagesFetch = (room) => {
  return (dispatch) => {
    firebase.database().ref(`/rooms/${room.roomId}/messages`)
    .once('child_added', snapshot => {
      dispatch({ type: 'messages_fetch_success', payload: snapshot.val() });
    })
  };
};




2 个答案:

答案 0 :(得分:0)

child_added将为每条消息创建一个新快照,而不是在一个对象中返回消息列表。

您可能希望查看.once('value')而不是once('child_added')

如果您想要一个有序列表,我添加了查询orderByKey(),它将按键顺序返回消息。

export const messagesFetch = (room) => {
  return (dispatch) => {
    firebase.database().ref(`/rooms/${room.roomId}/messages`)
      .orderByKey()
      .once('value')
      .then(snapshots => {
        snapshots.forEach(snapshot => {
          dispatch({ type: 'messages_fetch_success', payload: snapshot.val() });

          return false;
        });        
      });
  };
};

答案 1 :(得分:0)

是一个反应原生的应用程序,对吧?!如果是,请添加有问题的标记。

在firebase中,'child_added'为每个孩子开火,并且新生儿已经添加,例如 sketchthat 。使用'once'你不会听节点,但是,因为'child_added'你会为每个孩子激活你的功能。换句话说,您的函数返回相同常量的不同值(快照)。