# #firebase #react-native #firebase-storage
Вопрос:
Я пытаюсь удалить изображение из firebase. Я думаю, что проблема в том, что я не получил URL-адрес. После обновления плоского списка я получаю следующее предупреждение:
«Возможное отклонение Необработанного Обещания (идентификатор: 1): Объект {}»
Это предупреждение отображается только при обновлении плоского списка после удаления элемента.
«downloadUrl» — это URL-адрес, который я загружаю, когда загружаю изображение в firebase. Это тот URL, который я должен попытаться получить, или я ошибаюсь?
export function deleteBoards(item) {
return (dispatch, getState) => {
return new Promise((resolve, reject) => {
firebase
.firestore()
.collection('coachboards')
.doc(auth().currentUser.uid)
.collection('userCoachboards')
.doc(item.id)
.delete()
.then((snapshot) => {
//Here I try to delete the image from firebase storage
storage()
.refFromURL(snapshot.data().downloadURL.url)
.delete()
.then(function () {
resolve();
})
.catch(function (error) {console.log(error)});
})
.catch(() => {
reject();
});
});
};
}
Обновленный результат ✅
export function deleteBoards(item) {
return (dispatch, getState) => {
return new Promise((resolve, reject) => {
firebase
.firestore()
.collection('coachboards')
.doc(auth().currentUser.uid)
.collection('userCoachboards')
.doc(item.id)
.delete()
.then(() => {
//Here I try to delete the image from firebase storage
storage()
.refFromURL(item.downloadURL)
.delete()
.then(() => {
resolve();
})
.catch(error => {
reject();
});
})
.catch(() => {
reject();
});
});
};
}
Ответ №1:
Как говорится в тексте ошибки, вы не обрабатываете случай ошибки, если delete
произойдет сбой. Попробуйте добавить туда reject()
:
export function deleteBoards(item) {
return (dispatch, getState) => {
return new Promise((resolve, reject) => {
firebase
.firestore()
.collection('coachboards')
.doc(auth().currentUser.uid)
.collection('userCoachboards')
.doc(item.id)
.delete()
.then(() => {
//Here I try to delete the image from firebase storage
firebase.storage()
.refFromURL(item.downloadURL)
.delete()
.then( () => {
resolve();
})
.catch((error) => {
reject()
});
})
.catch(() => {
reject();
});
});
};
}
Можете ли вы также зарегистрировать это snapshot.data().downloadURL.url
значение, чтобы убедиться, что оно правильное.
Также не должно ли это быть firebase.storage()
вместо того, чтобы просто storage()
Комментарии:
1. Спасибо за ваш ответ! Мм, конечно, моя вина! но это все равно дает мне ту же ошибку/предупреждение. если я войду в журнал консоли
console.log(item.downloadURL);
вверху, он выдаст мне правильный URL-адрес, но если я попробую этот код.refFromURL(snapshot.data().item.downloadURL)
, ничего не отобразится, я тоже попробовал.refFromURL(item.downloadURL)
. и если я консольный журналsnapshot.data().downloadURL.url
, ничего не отображается.2. Вы можете сказать мне, что
items
это такое? У вас есть скриншот, какjson
, возможно, в базе данных. Если у вас получитсяdownloadURL
,item.downloadURL
я бы рекомендовал использовать это напрямую, а не отsnapshot
. Я обновлю ответ3. Теперь это работает, спасибо за помощь. Я обновил свой вопрос с рабочим результатом. Тем не менее, я изменил firebase.storage на просто storage (), и тогда это работает.
4. Ах, извините, что я изменил это, потому что я думал, что это тоже была ошибка. Приятно слышать, что это сработало 🙂