gpt4 book ai didi

javascript - imagesURI 做了很多 promise 如何在这种情况下使用promise.all

转载 作者:行者123 更新时间:2023-12-03 00:58:27 25 4
gpt4 key购买 nike

此函数将图像数组发布到 Firebase 存储并获取 URL 将其发布到 Firebase 数据库。

uploadImages(images, callBack) {
this.uploadedImages = [];
for (let index = 0; index < images.length; index++) {
const imagesURI = storage()
.ref("images/")
.child(this.uid())
.child(index + "");
imagesURI.putString(images, "data_url").then(() => {
imagesURI.getDownloadURL().then(url => {
console.log(url);
this.uploadedImages.push(url);
console.log(this.uploadedImages);
});
});
}
callBack(this.uploadedImages);
}

在这种情况下我该如何使用Promise.all

最佳答案

putStringgetDownloadURL 都返回一个 Promise,因此您可以将它们冒泡,并将它们添加到 Promise.all 的数组中.

uploadImages(images, callBack) {
let promises = [];
for (let index = 0; index < images.length; index++) {
const imagesURI = storage()
.ref("images/")
.child(this.uid())
.child(index + "");
let promise = imagesURI.putString(images, "data_url").then(() => {
return imagesURI.getDownloadURL();
})
promises.push(promise);
}
Promise.all(promises).then(function(urls)
this.uploadedImages = urls;
callBack(this.uploadedImages);
});
}

请注意,我只关注使用 promise 在上传完成时进行捕获。代码中可能还有其他错误。

正如 Bergi 评论的那样,您还可以用返回 promise 来替换回调:

uploadImages(images, callBack) {
let promises = [];
for (let index = 0; index < images.length; index++) {
const imagesURI = storage()
.ref("images/")
.child(this.uid())
.child(index + "");
let promise = imagesURI.putString(images, "data_url").then(() => {
return imagesURI.getDownloadURL();
})
promises.push(promise);
}
return Promise.all(promises)
}

有了这个,你可以用以下方式调用它:

uploadImages(imageArray).then(function(downloadUrls) {
console.log(downloadUrls);
})

关于javascript - imagesURI 做了很多 promise 如何在这种情况下使用promise.all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52720660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com