async / await with firebase .on()数据库侦听器

时间:2017-06-29 01:09:15

标签: firebase firebase-realtime-database redux async-await react-redux

我正在设计一个消息传递应用程序,其中redux作为我的状态管理器和firebase来存储我的数据。我已经开始以这种方式编写数据库监听器:

const fetchMessages = roomKey => async dispatch => {
  const db = firebase.database();
  let { messages } = await db.ref(`messages/${roomKey}`).on('value');
dispatch({
  type: SET_MESSAGES,
  payload: messages,
})

};

所有这些基本上都是通过房间密钥获取消息,然后调度一个动作,将消息设置为redux状态。

传统上,这将写成:

db.ref(`messages/${roomKey}`).on('value', snapshot => {
  const messages = snapshot.messages;
  dispatch({
    type: SET_MESSAGES,
    payload: messages,
  })
});

每次messages/${roomKey}发生变化时,都会执行我的调度功能。我想知道使用async await语法是否可以正常工作,如果没有,我怎么能让它工作。

希望这足够详细!

1 个答案:

答案 0 :(得分:8)

引用的on method不会返回承诺。它传递的回调可以多次调用,因此承诺不符合方法的契约。

但是,引用的once method方法确实会返回一个promise,因为它传递的(可选)回调只被调用一次 - 之后promise就会解析。 once方法可能是您要使用的方法。