我正在使用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);
})
})
},
答案 0 :(得分:3)
如果要返回值,则需要检索它。您可以使用once
和value
事件执行此操作,该事件会返回一个解析为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
。