使用React更新Firebase中的数据

时间:2017-01-26 04:12:47

标签: reactjs firebase

我正在使用React js更新firebase中的对象。 我正在使用这个boilerplate as reference

  updateBookList: (id, data) => {
    return firebaseDb.ref('NewBooks').child(id).update(data).then(() => {
      return {};
    }).catch(error => {
      return {
        errorCode: error.code,
        errorMessage: error.message
      }
    });
  },

以下更新书籍。

我想要做的是返回结果而不是返回空白{}。如何返回我更新的结果?

这就是我取书的方式:

  fetchBooks: () => {
    return new Promise((resolve, reject) => {
      const bookSub = firebaseDb.ref('NewBooks').on("value", books => {
        resolve(books.val());
      }, error => {
        reject(error);
      })
    })
  },

1 个答案:

答案 0 :(得分:3)

如果要返回值,则需要检索它。您可以使用oncevalue事件执行此操作,该事件会返回一个解析为Firebase snapshot的承诺:

updateBookList: (id, data) => {
  let ref = firebaseDb.ref('NewBooks');
  return ref
    .child(id)
    .update(data)
    .then(() => ref.once('value'))
    .then(snapshot => snapshot.val())
    .catch(error => ({
      errorCode: error.code,
      errorMessage: error.message
    }));
}

此外,您也可以使用fetchBooks来简化once

fetchBooks: () => {
  return firebaseDb.ref('NewBooks')
    .once("value")
    .then(snapshot => snapshot.val());
}

once会返回一个承诺,因此您不必创建自己的承诺,也不会有悬空事件监听器。在on的实现中对fetchBooks的调用将在每次调用时添加一个侦听器,如果数据库发生更改,将尝试多次调用resolve