여러 이미지를 다운로드 할 수있는 URL을 얻으려고 시도 중입니다. 그런 다음 내 앱에서 변경 사항을 트리거합니다. 하지만 ... 어떤 이유로 든 이미지 중 하나가 존재하지 않으면 모든 것이 자동으로 실패합니다.Firebase 저장소가 자동으로 실패합니까?
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
화재가 발생하지 않았습니다. 그리고 Promise.all
은 해결되지 않습니다.
여기 무슨 일 이니? getDownloadURL
에 전화하기 전에 파일의 존재 여부를 확인할 수있는 방법이 있습니까?
EDIT : @mjr은 문서에서 오류 콜백 형식을 약간 다르게 지정했습니다. 이것은 또한 결코 오류를 발생시키지 않는 것 같습니다 :
.then(
imageURL => {
return imageURL;
},
err => {
console.log('caught', err);
return "";
}
);
[워드 프로세서] (https://firebase.google.com/docs/storage/web/download-files) 다른 방법이 여기에서 어떻게 작성했는지에 따라 오류를 포매팅합니다. 나는이 방법을 시도하고 무슨 일이 일어나는가 보려고. – mjr
나는 그것을 알아 차렸다. 또한 오류 콜백을 throw하지 않는 것 같습니다. 나는 보여줄 질문을 편집 할 것이다. – nicholas
푸시 대신에 ['Array.prototype.map'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)을 사용하는 것이 더 관용적입니다 'forEach' 내에서 배열에 원소를 넣는 것. – royhowie