NODE.JS:如何确保阅读流已结束并且数据已写入?

时间:2018-12-24 04:21:11

标签: javascript node.js stream async-await

因此,我是node.js上异步/等待的新手,我可以使用一些帮助来弄清楚这段代码。

我正在尝试通过“ 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 个答案:

答案 0 :(得分:2)

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

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)