Я пытаюсь получить URL-адрес загрузки для нескольких изображений, а затем запускаю изменение в своем приложении. Но... если одно из этих изображений по какой-либо причине не существует, все молча терпит неудачу.
Вот код:
const promises = [];
snapshot.forEach(childSnapshot => {
const child = childSnapshot.val();
const promise = firebase.storage()
.ref(child.songImagePath)
.getDownloadURL()
.catch(err => {
console.log('caught', err);
return "";
})
.then(imageURL => {
return imageURL;
});
promises.push(promise);
});
Promise.all(promises)
.catch(err => {
console.log('caught', err);
})
.then(urls => {
...do something with urls array
});
Я использую child.songImagePath
в своей базе данных для хранения местоположения изображения в хранилище. Если ВСЕ пути для ВСЕХ изображений имеют изображения, все работает отлично.
НО, если загрузка пошла не так или по какой-то причине в месте хранения нет изображения, она автоматически завершается ошибкой. Ни один из моих catch
es не загорелся. И Promise.all
никогда не разрешается.
Что тут происходит? Есть ли способ проверить существование файла перед вызовом getDownloadURL
?
РЕДАКТИРОВАТЬ: Как указывает @mjr, в документации они отформатировали свой обратный вызов ошибки немного иначе, чем я. Это также, похоже, никогда не вызывает ошибку:
.then(
imageURL => {
return imageURL;
},
err => {
console.log('caught', err);
return "";
}
);
Array.prototype.map
a> вместоpush
элементов массива изforEach
. - person royhowie   schedule 17.09.2016