node.js - 异步上传多个文件到谷歌云存储桶

标签 node.js asynchronous google-cloud-storage

我正在尝试使用 NodeJS 将多个文件上传到 Google Cloud Storage 存储桶。我希望在继续之前上传所有文件。我尝试了几种方法,但似乎无法正确处理。

const jpegImages = await fs.readdir(jpegFolder);

console.log('start uploading');

await jpegImages.forEach(async fileName => {
    await bucket.upload(
        path.join(jpegFolder, fileName),
        {destination: fileName}
     ).then( () => {
         console.log(fileName + ' uploaded');
     })
})

console.log('finished uploading');

这给了我以下输出,这不是我所期望的。为什么上传文件后没有执行'上传完成'日志?

start uploading
finished uploading
image1.jpeg uploaded
image2.jpeg uploaded
image3.jpeg uploaded

最佳答案

async/await 不适用于 forEach 和其他数组方法。

如果您不需要顺序上传(文件可以并行上传),您可以创建一个 Promise 数组并使用 Promise.all() 一次执行它们。

const jpegImages = await fs.readdir(jpegFolder);

console.log('start uploading');

await Promise
    .all(jpegImages.map(fileName => {
        return bucket.upload(path.join(jpegFolder, fileName), {destination: fileName})
    }))
    .then(() => {
        console.log('All images uploaded')
    })
    .catch(error => {
        console.error(`Error occured during images uploading: ${error}`);
    });

console.log('finished uploading');

关于node.js - 异步上传多个文件到谷歌云存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54095155/

相关文章:

asynchronous - 使用 IO::Socket::Async 处理连接失败

java - 如何在访问 Google Drive API 时隐藏/绕过授权弹出窗口

javascript - JavaScript 对象在 HTTP 请求中占用的数据大小 (kB) 是多少?

javascript - 将 Meteor 部署到 Google App Engine 2017

javascript - 从多个异步函数( promise )收集数据

google-cloud-storage - 批量文件上传到云存储

javascript - gcloud-node - 如何确保通过签名 URL 上传到 Google Cloud Storage 的文件是公开可读的?

javascript - 是否可以不提及grunt中的所有脚本文件路径?

javascript - 仅当添加了新文件时如何使用 watch 运行 gulp 任务

javascript - 如何用 Promise.all() 重构 for-loop async/await?