同步循环内的异步函数

时间:2021-01-11 15:48:33

标签: javascript node.js asynchronous async-await

我正在尝试使用 ForEach 循环将文件从服务器端上传到 S3 存储桶,并且在每次成功上传后,还需要执行其他操作。但我似乎无法将异步函数 writeFile 包装在承诺或任何其他允许我等待上传完成的方法中。

Bellow 是我的代码,没有添加将 writeFile 包装在某种承诺中的代码。 请告知我做错了什么以及如何实现我正在尝试的目标。

const imageReplacer =( body, title) => {
 const bucketName = process.env['BUCKET_NAME']
 let newEntry = body;
 const trimedTitle =  title.replace(/\s/g, '');
 const s3fsImpl = new S3FS(bucketName, {
    accessKeyId: process.env["AWS_ACCESS_KEY_ID"],
    secretAccessKey: process.env["AWS_SECRET_KEY"],
    region: process.env['AWS_REGION'],
});    

    const files = fs.readdirSync(tempFolder)
    console.log("file", files)

  
    files.forEach( file =>{
        let filePath = tempFolder+"\\"+file;
        console.log(filePath)
        try{                  
            let stream = fs.createReadStream(filePath);
            const fileName = bucketName+"/"+trimedTitle+ "/"+file
            const options = {
                ACL:'public-read'
             }                  
            s3fsImpl.writeFile(fileName, stream, options)
                .then(function (res) {
                    let newUrl =  bucketUrl+trimedTitle+"/"+file;
                    let oldPath =localHostPath+file
                    newEntry = newEntry.replace(oldPath,newUrl); 
                    console.log("write file")
                    });             
                                
        }
        catch (error){
            console.log('error: ${error} while reading file ${file}')
        }
    })
}


    
 

谢谢

0 个答案:

没有答案