javascript - Node .JS : How to make sure a reading stream has ended and the data written?

标签 javascript node.js stream async-await

所以我是 Node.js 上的 async/await 新手,我可以使用一些帮助来弄清楚此代码。

我正在尝试通过“ftp”包从 ftp 服务器获取文件,将数据写入本地“data.txt”并稍后在代码中打开它。我的问题是,在尝试使用 fs.readFileSync() 打开文件之前,我不明白如何确保文件完全写入“data.txt”中。

const ConfigFTP = require('./credentials.json')
const FtpClient = new ftpclient();


FtpClient.on('ready', async function() {
    await new Promise(resolve =>
      FtpClient.get('the ftp file directory', (err, stream) => {
        if (err) throw err;
        stream.once('close', () => {FtpClient.end();});
        // Stream written in data.txt
        const Streampipe = stream.pipe(fs.createWriteStream('data.txt')).on('finish', resolve)
      })
    )
})
FtpClient.connect(ConfigFTP);
var Data = fs.readFileSync('data.txt', 'utf8');

最佳答案

我不确定您想要完成什么,但您可以执行以下操作:

1)

const ConfigFTP = require('./credentials.json')
const FtpClient = new ftpclient()

let writeStream = fs.createWriteStream('data.txt')

FtpClient.on('ready', async function () {
    FtpClient.get('the ftp file directory', (err, stream) => {
            if (err) throw err
            stream.once('close', () => { FtpClient.end() })
            // Stream written in data.txt
            const Streampipe = stream.pipe(writeStream)
    })
})
FtpClient.connect(ConfigFTP)

writeStream.on('finish', () => {
    var Data = fs.readFileSync('data.txt', 'utf8')
})

2)

const ConfigFTP = require('./credentials.json')
const FtpClient = new ftpclient()


FtpClient.on('ready', async function() {
    await new Promise(resolve =>
      FtpClient.get('the ftp file directory', (err, stream) => {
        if (err) throw err
        stream.once('close', () => {FtpClient.end()})
        // Stream written in data.txt
        const Streampipe = stream.pipe(fs.createWriteStream('data.txt')).on('finish', resolve)
      })
    )
    var Data = fs.readFileSync('data.txt', 'utf8')
})
FtpClient.connect(ConfigFTP)

关于javascript - Node .JS : How to make sure a reading stream has ended and the data written?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53909152/

相关文章:

javascript - removeEventListener - 函数定义本身内的回调?

javascript - 在javascript中将对象推送到数组

javascript - Node.js 流 'end' 事件未触发

Delphi XE2 DataSnap - 通过 TStream 将 JPEG 文件从服务器流式传输到客户端

javascript - 在 Chart.js 工具提示中显示 PHP 数组

javascript - 显示 2 位小数

javascript - Js - 使用运算符作为字符串评估数学表达式的替代方法

Node.js Express + Jade(内衬项目上的事件类)

mysql - 如何跨多个时区处理按日期分组的数据请求?

scala - 如何在Scala中修复我的斐波那契流