NODE.JS: Как убедиться, что поток чтения закончился и данные записаны? - PullRequest
0 голосов
/ 24 декабря 2018

, поэтому я новичок в async / await на node.js и могу использовать некоторую помощь для выяснения этого кода.

Я пытаюсь получить файл с ftp-сервера через пакет 'ftp', чтобы записать данные в локальный файл «data.txt» и открыть его позже в коде.Моя проблема в том, что я не понимаю, как убедиться, что файл полностью записан в «data.txt», прежде чем пытаться открыть его с помощью fs.readFileSync ().

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 голосов
/ 24 декабря 2018

Я не уверен, что вы хотите достичь, но вы можете сделать что-то вроде этого:

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)
...