gpt4 book ai didi

javascript - 如何在 javascript 中使用 async await 等到 for 循环完成?

转载 作者:行者123 更新时间:2023-11-29 23:16:51 26 4
gpt4 key购买 nike

我的用例。

  1. 我在浏览器中将 5 张图片上传到 s3 服务器,并获取这些图片的上传 url。
  2. 将该 url 传递到后端。

这是我的异步函数

try{
await uploadImagesToS3(imagesArray);

await saveUrlsInBackend();

}catch(error){

}

在我的uploadImagesToS3 函数中,我正在尝试做这样的事情。

uploadImagesToS3(){
resolve(FORLOOP)
}

for 循环运行 5 次后,我想将其解析为我的主要异步函数。

这是我真正的uploadImagesToS3函数

onUpload(array, albumName) {
return new Promise((resolve, reject) => {
resolve(
for (let index = 0; index < array.length; index++) {
var files = document.getElementById(array[index]).files;
if (!files.length) {
return alert("Please choose a file to upload first.");
}
var file = files[0];
var fileName = file.name;
var albumPhotosKey = encodeURIComponent(albumName) + "//";

var photoKey = albumPhotosKey + fileName;
self;
s3.upload(
{
Key: photoKey,
Body: file,
ACL: "public-read"
},
(err, data) => {
if (err) {
return alert(
"There was an error uploading your photo: ",
err.message
);
}
// alert("Successfully uploaded photo.");
this.images[index].image_path = data.Location;
}
);
}
);
});
}

但它不允许我在 resolve 函数中使用 for 循环。我怎样才能实现这种异步等待机制?

最佳答案

resolve(FORLOOP)” - 不,这不是它的工作方式。

你应该单独将 s3.upload 方法 promise 到一个函数中,该函数只调用它并返回结果的 promise ,而不是其他任何东西:

function upload(value) {
return new Promise((resolve, reject) => {
s3.upload(value, (err, res) => {
if (err) reject(err);
else resolve(res);
});
});
}

现在您可以在您的方法中使用它,通过将 promise 链接在一起或简单地使用 async/await:

async onUpload(array, albumName) { /*
^^^^^ */
for (const id of array) {
const files = document.getElementById(id).files;
if (!files.length) {
alert("Please choose a file to upload first.");
return;
}
const file = files[0];
const albumPhotosKey = encodeURIComponent(albumName) + "//";

const photoKey = albumPhotosKey + file.name;
try {
const data = await upload({
// ^^^^^
Key: photoKey,
Body: file,
ACL: "public-read"
});
// alert("Successfully uploaded photo.");
this.images[index].image_path = data.Location;
} catch(err) {
alert("There was an error uploading your photo: ", err.message);
return;
}
}
}

关于javascript - 如何在 javascript 中使用 async await 等到 for 循环完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52436583/

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