Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/514.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 异步/等待通过数组循环以获取s3签名URL';s_Javascript_Node.js_Asynchronous_Async Await - Fatal编程技术网

Javascript 异步/等待通过数组循环以获取s3签名URL';s

Javascript 异步/等待通过数组循环以获取s3签名URL';s,javascript,node.js,asynchronous,async-await,Javascript,Node.js,Asynchronous,Async Await,我已经编写了以下代码。输入(结果)是S3存储桶上存在的文件名数组。我希望做的是循环遍历该列表,并为每个列表检索一个签名的URL let result=[{fileName:“dog.jpg”},{fileName:“cat.jpg”}]; 异步函数getSignedUrl(键){ 设params={Bucket:bucketName,Key:Key}; 让url=wait s3.getSignedUrl('getObject',params,(err,url)=>{ 如果(错误)拒绝(错误)

我已经编写了以下代码。输入(结果)是S3存储桶上存在的文件名数组。我希望做的是循环遍历该列表,并为每个列表检索一个签名的URL

let result=[{fileName:“dog.jpg”},{fileName:“cat.jpg”}];
异步函数getSignedUrl(键){
设params={Bucket:bucketName,Key:Key};
让url=wait s3.getSignedUrl('getObject',params,(err,url)=>{
如果(错误)拒绝(错误)
返回url;
});
}
异步函数过程(项){
对于(让项目中的项目){
const signedUrl=wait getSignedUrl(item.fileName);
item.url=signedUrl;
}
退货项目;
}
过程(结果)。然后(res=>{
控制台日志(res);
});

注意:如果您正在处理一系列可能的承诺,最好使用
Promise.all()
,因为
wait
会在异步函数中停止该代码的执行(而不是事件循环),即使它是一个无阻塞函数。在这种情况下,执行并行请求的速度要快得多

您只能将
wait
与返回承诺的函数一起使用,而不是接受回调的函数。谢谢您的回答。这对我帮助很大。我只需删除let url=await s3.getSignedUrl中的'await'即可使其正常工作。我会尽力履行承诺的。好的,等会儿。。3.我忘了取下行李。。感谢您指出这一点。文档似乎说getSignedUrl的getObject版本是同步的,为什么需要等待同步代码?
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);
});