我已经编写了以下代码。输入(结果)是存储在S3存储桶上的文件名数组。我希望做的是遍历该列表并检索每个列表的签名URL。
decodedtext = ""
for line in rawtext:
decodedtext += line.decode("utf-8")
...
for line in decodedtext.split("\n"):

问题是当我在console.log结果时,新的URL不存在。我无法弄清问题是什么。我猜它是一个异步问题,但我没有足够的经验来解决它。
答案 0 :(得分:2)
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);
});
注意:如果您正在处理可能的承诺数组,最好使用Promise.all()
,因为await
在 异步函数中停止执行该代码 (不是事件循环),即使它是一个无阻塞函数。在这种情况下,执行并行请求要快得多