Я хочу console.log()
в console.log(list)
the uploadBytes
моего изображения, чтобы я мог реализовать его и передать на моем бэкэнде, не отделяя его.
Код примерно такой
const handleSubmitForm = e => {
e.preventDefault()
alert("Your Images Is Uploaded")
const imagesRef = ref(storage,`GALLERY/${image.name}${v4()}`)
const imagesRef2 = ref(storage,`GALLERY/${image2.name}${v4()}`)
const imagesRef3 = ref(storage,`GALLERY/${image3.name}${v4()}`)
const imagesRef4 = ref(storage,`GALLERY/${image4.name}${v4()}`)
const imagesRef5 = ref(storage,`GALLERY/${image5.name}${v4()}`)
const id = v4()
const Uploads = async() => {
const list = []
uploadBytes(imagesRef,image)
.then((snapshot) => {
getDownloadURL(snapshot.ref).then((url) => {
console.log('Image uploaded' + `${url}`)
const item = url
list.push(item)
})
})
uploadBytes(imagesRef2,image2)
.then((snapshot) => {
getDownloadURL(snapshot.ref).then((url) => {
console.log('Image uploaded' + `${url}`)
const item = url
list.push(item)
})
})
uploadBytes(imagesRef3,image3)
.then((snapshot) => {
getDownloadURL(snapshot.ref).then((url) => {
console.log('Image uploaded' + `${url}`)
const item = url
list.push(item)
})
})
uploadBytes(imagesRef4,image4)
.then((snapshot) => {
getDownloadURL(snapshot.ref).then((url) => {
console.log('Image uploaded' + `${url}`)
const item = url
list.push(item)
})
})
uploadBytes(imagesRef5,image5)
.then((snapshot) => {
getDownloadURL(snapshot.ref).then((url) => {
console.log('Image uploaded' + `${url}`)
const item = url
list.push(item)
})
})
console.log(list)
}
Uploads()
}
Моя единственная проблема здесь заключается в const list = []
, где я хочу добавить каждый uploadBytes
в свой список, чтобы мне не приходилось повторно вызывать бэкэнд, потому что Имма помещает туда бэкэнд в каждый uploadBytes
, но я хочу сделать это более простым. как просто нажать его в списке.
Я пытался сделать это в асинхронном режиме, но это не сработало. Это просто дает мне пустой массив, потому что я не знаю? Я просто думаю, что мне нужно сделать uploadBytes
асинхронным, но все равно не работает.
Если я правильно понимаю ваш вопрос, вы хотите зарегистрировать список URL-адресов загрузки после того, как все изображения будут загружены.
Это требует, чтобы вы обрабатывали две асинхронные операции для каждой загрузки:
Поскольку вам нужно сделать это для каждого изображения, вам понадобится Promise.all
, а поскольку это два вызова, вам понадобится цепочка операций then
.
В сочетании это приводит к:
// Helper function to upload an image and get back its download URL
const UploadSingleImage = (ref, image) => {
return uploadBytes(ref, image).then((snapshot) => {
return getDownloadURL(ref);
})
}
const Uploads = async () => {
const list = await Promise.all([
UploadSingleImage(imagesRef, image),
UploadSingleImage(imagesRef2, image2),
UploadSingleImage(imagesRef3, image3),
UploadSingleImage(imagesRef4, image4),
UploadSingleImage(imagesRef5, image5)
]);
console.log(list)
}