为什么Firebase中的命令无法正常运行,但在控制台中可以正常运行?

时间:2020-06-05 13:41:40

标签: javascript reactjs firebase firebase-realtime-database

为什么渲染数据时无法在firebase中订购,但在控制台日志中却可以正常工作

export const fetchAPI = (endpoint, dispatchType) => (dispatch) => new Promise((resolve, reject) => {
  dispatch({ type: CHANGE_LOADING, payload: true });
  firebase.database().ref(endpoint).orderByChild('name').on('value', (snapshot) => {
    if (snapshot.val() === null) {
      dispatch({ type: CHANGE_LOADING, payload: false });
      reject(false);
    } else {
      snapshot.forEach((snap) => console.log(snap.val()));
      const items = [];
      Object.keys(snapshot.val()).map((snap) => items.push({
        key: snap,
        apiItem: snapshot.val()[snap],
      }));
      dispatch({ type: dispatchType, payload: items });
      dispatch({ type: CHANGE_LOADING, payload: false });
      resolve(items);
    }
  });
});

1 个答案:

答案 0 :(得分:0)

在Firebase上运行查询时,它将为匹配的快照返回三段信息:

  1. 他们的钥匙
  2. 他们的价值观
  3. 他们的相对顺序

调用snapshot.val()时,数据将转换为JSON对象,该对象仅包含键和值的位置。 JSON对象中的键没有定义的顺序,因此,当您调用snapshot.val()时,有关该顺序的信息将会丢失。

解决方案就是您在方法顶部所做的事情:使用snapshot.forEach()以正确的顺序查看子节点。