首页 > 解决方案 > 假设在“fs.writeFileStream”完成写入并在管道之后关闭文件后触发读取流“结束”事件是否安全?

问题描述

我对这些片段之间的最佳解决方案犹豫不决:

simple_client({
    method: 'get',
    path: key,
    id: 'download'
})
    .then(req => new Promise((resolve, reject) => {
        const write_stream = fs.createWriteStream(path);
        req.on('result', (err, res) => {
            if (err) {
                reject(err);
            }
            res.pipe(write_stream);
            res.on('end', () => {
                console.log('Done!');
                resolve();
            });
        });
        req.end();
    }))
    .then(() => {  
        console.log(`Is it safe to touch ${path} file here?`);
    });

或者

simple_client({
    method: 'get',
    path: key,
    id: 'download'
})
    .then(req => new Promise((resolve, reject) => {
        const write_stream = fs.createWriteStream(path);
        req.on('result', (err, res) => {
            if (err) {
                reject(err);
            }
            res.pipe(write_stream);
            write_stream.on('finish', () => {
                console.log('Done!');
                resolve();
            });
        });
        req.end();
    }))
    .then(() => {  
        console.log(`Is it safe to touch ${path} file here?`);
    });

可读的管道文档说:

默认情况下,当源 Readable 流发出“end”时,在目标 Writable 流上调用 stream.end()

那么,当从可读流中发出“结束”事件时,我是否可以假设文件已完全写入并关闭?因此,第一个片段就足够了。谢谢你的帮助!

标签: node.jsstream

解决方案


推荐阅读