fs.createWriteStream 正在流式传输但不写入

问题描述 投票:0回答:1

我最近才注意到下面的代码没有做它之前做的事情……实际上是将文件写入磁盘。

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
发生了一些变化,悄悄地搞砸了我的代码?很高兴得到任何指导。

node.js request get createwritestream
1个回答
0
投票

感谢@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();
    });
}

我本可以发誓原始代码工作正常然后停止工作,但我很高兴我没有发誓

© www.soinside.com 2019 - 2024. All rights reserved.