【发布时间】:2019-02-12 22:44:39
【问题描述】:
我正在尝试先解压缩一个文件,然后等待该解压缩文件完成,然后再循环遍历每个文件并将其上传到 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(),所以它会被永远等待。 -
uploadToS3是异步的吗?如果没有,您的uploadS3Promise根本不应该创建承诺,因为它是完全同步的。
标签: javascript promise async-await fs