我最近才注意到下面的代码没有做它之前做的事情……实际上是将文件写入磁盘。
const download = async (archive) => {
const d = await new Promise((resolve) => {
const opts = { method: 'GET' };
const req = https.request(url, opts, (res) => {
const file = fs.createWriteStream(`path/to/${archive}`);
res.on('data', (chunk) => {
file.write(chunk);
//process.stdout.write(chunk);
})
.on('end', () => file.end());
resolve(archive);
});
req.on('error', (error) => console.error(error));
req.end();
});
}
文件正在磁盘上创建,但只是
0B
。如果我取消注释 process.stdout.write(chunk)
,它会愉快地将二进制文件的 gobbledegook 吐出到控制台。但实际上没有任何内容写入磁盘。
我哪里搞砸了?或者最近
node
发生了一些变化,悄悄地搞砸了我的代码?很高兴得到任何指导。
感谢@jfriend00 的评论,以下编辑修复了问题
const download = async (archive) => {
const d = await new Promise((resolve) => {
const opts = { method: 'GET' };
const req = https.request(url, opts, (res) => {
const file = fs.createWriteStream(`path/to/${archive}`);
res.on('data', (chunk) => {
file.write(chunk);
})
.on('end', () => {
file.end());
// moving resolve() here
resolve(archive);
});
//resolve(archive);
});
req.on('error', (error) => console.error(error));
req.end();
});
}
我本可以发誓原始代码工作正常然后停止工作,但我很高兴我没有发誓