Ele*_*off 0 javascript asynchronous node.js async-await
我已经编写了以下代码。输入(结果)是 S3 存储桶中存在的文件名数组。我希望做的是遍历该列表并为每个列表检索一个签名 URL。
let result = [{ fileName: "dog.jpg" },{ fileName: "cat.jpg"}];
async function getSignedUrl(key){
let params = { Bucket: bucketName, Key: key };
let url = await s3.getSignedUrl('getObject', params, (err, url) => {
if (err) reject(err)
return url;
});
}
async function process(items) {
for (let item of items) {
const signedUrl = await getSignedUrl(item.fileName);
item.url = signedUrl;
}
return items;
}
process(result).then(res => {
console.log(res);
});Run Code Online (Sandbox Code Playgroud)
问题是当我 console.log 结果时,新的 URL 不存在。我无法弄清楚问题是什么。我猜这是一个异步问题,但我没有足够的经验来弄清楚。
小智 10
let result = [{ fileName: "dog.jpg" },{ fileName: "cat.jpg"}];
async function getSignedUrl(key){
return new Promise((resolve,reject) => {
let params = { Bucket: bucketName, Key: key };
s3.getSignedUrl('getObject', params, (err, url) => {
if (err) reject(err);
resolve(url);
});
});
}
async function process(items) {
for (let item of items) {
const signedUrl = await getSignedUrl(item.fileName);
item.url = signedUrl;
}
return items;
}
process(result).then(res => {
console.log(res);
});
Run Code Online (Sandbox Code Playgroud)
注意:Promise.all()如果您正在处理一组可能的承诺,最好使用它,因为即使它是一个无阻塞函数,也会await停止在异步函数 (而不是事件循环)中执行该代码。在这种情况下执行并行请求要快得多