Async / Await: понимание проблемы с Async / Await - PullRequest
2 голосов
/ 01 декабря 2019

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

вот мой код:

var stream = async function (){
           var myStream =  fs.createReadStream(__dirname+"/someText.txt",'utf8');

            await myStream.on('data', (chunk)=>{
             console.log(chunk)// I want to display this first
        }) 
 }

stream()

console.log('listening') // and then move on to display this one 

1 Ответ

2 голосов
/ 01 декабря 2019

слушатели потоков не обещают, вы не должны await на myStream.on('data'). Вы можете сделать это, но это разрешится немедленно.

Оберните потоковый слушатель в Promise и дождитесь его, для этого вы можете использовать один раз

const { once } = require('events');

var stream = async function (){
   var myStream =  fs.createReadStream(__dirname+"/someText.txt",'utf8');

    myStream.on('data', (chunk) => {
       console.log(chunk)// I want to display this first
    });

    // Wait until everything has been read
    // Or an error has been triggered
    await once(myStream, 'close'); 
}

(async() => {
  await stream(); // await can only be used in `async` function
  console.log('listening');
})().catch(console.error);


...