javascript - 第二个异步等待函数未调用
问题描述
我试图先解压缩一个文件,然后等待该解压缩文件完成,然后再循环遍历每个文件并将其上传到 S3 存储桶。第一个函数unzipPromise
运行良好,所有内容都在正确的目录中解压缩,但uploadS3Promise
根本没有运行。我没有在这个过程中遇到错误,它只是运行并解压缩文件并且从不触及该uploadS3Promise
功能。
function unzipInput(file, client, project_number, oldpath, newpath) {
path = `zips/${client}/${project_number}/${file}/`;
function unzipPromise() {
return new Promise((resolve, reject) => {
fse.mkdirsSync(path);
fs.rename(oldpath, newpath, err => {
if (err) {
throw err;
}
});
fs.createReadStream(newpath).pipe(unzip.Extract({ path }));
});
}
function uploadS3Promise() {
console.log("running");
return new Promise((resolve, reject) => {
// fs.unlinkSync(newpath);
fs.readdirSync(newpath).forEach(file => {
uploadToS3(file, client, project_number, path);
console.log(file, "test");
});
if (err) reject(err);
else resolve("success");
});
}
// New code with async:
(async () => {
try {
await unzipPromise();
await uploadS3Promise();
} catch (e) {
console.error(e);
}
})();
}
解决方案
您应该resolve
在解压缩路径完成或reject
发生错误后调用。而且由于流是 EventEmitter,你可以监听事件并与之交互
const stream = fs.createReadStream(newpath).pipe(unzip.Extract({ path }))
stream
.on('error', (err) => reject(err))
.on('finish', () => resolve())
推荐阅读
- nginx - Nginx 重定向带和不带端口
- php - 在php foreach循环中基于用户会话隐藏和显示按钮
- html - 使用 CSS 循环裁剪 iframe
- python - Python:递归期间的 append() 奇怪行为
- javascript - 这个参数如何知道参数
- php - Laravel 7.21 类 Illuminate\Support\Facades\Input 未找到
- java - 使用 JavaFX 将鼠标位置保存到对象
- keras - 使用重新缩放时 model.predict 的意外输出
- c# - C#:共享结构字段和继承
- c# - C#如何在linq中的列表选择中实现'group by''left join'和列表