我正在尝试使用 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/