作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的用例。
这是我的异步函数
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/
我是一名优秀的程序员,十分优秀!