Estoy actualizando un objeto en firebase usando React js. Estoy usando este modelo como referencia .
updateBookList: (id, data) => { return firebaseDb.ref('NewBooks').child(id).update(data).then(() => { return {}; }).catch(error => { return { errorCode: error.code, errorMessage: error.message } }); },Lo siguiente actualiza la multa de Books.
Lo que quiero hacer es devolver el resultado en lugar de devolver un {} en blanco. ¿Cómo puedo devolver el resultado de lo que actualicé?
Así es como busco libros:
fetchBooks: () => { return new Promise((resolve, reject) => { const bookSub = firebaseDb.ref('NewBooks').on("value", books => { resolve(books.val()); }, error => { reject(error); }) }) },Si desea devolver el valor, debe recuperarlo. Puede hacerlo usando once y el evento de value , que devuelve una promesa que se resuelve en una instantánea de Firebase:
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 })); } Además, también podría simplificar sus fetchBooks usando once allí:
fetchBooks: () => { return firebaseDb.ref('NewBooks') .once("value") .then(snapshot => snapshot.val()); } once devuelve una promesa, por lo que no tiene que crear la suya propia y no tendrá un oyente de eventos colgando. La llamada a on en su implementación de fetchBooks verá que se agrega un oyente con cada llamada y se intentarán varias llamadas para resolve si la base de datos cambia.