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

Ale*_*nes 1 async-await firebase firebase-realtime-database redux 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,
})
Run Code Online (Sandbox Code Playgroud)

};

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

传统上,这将写成:

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

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

希望这足够详细!

car*_*ant 8

引用的on方法不返回promise.它传递的回调可以多次调用,因此promise不适合方法的契约.

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