【问题标题】:Async/Await: Understanding problem with Async / AwaitAsync/Await:了解 Async/Await 的问题
【发布时间】:2020-03-25 23:29:38
【问题描述】:

我正在使用异步/等待。我想先显示我从可读流中检索到的数据,然后显示相应的消息;

这是我的代码:

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 

【问题讨论】:

    标签: node.js express asynchronous async-await node-modules


    【解决方案1】:

    流监听器不是承诺,你不应该在myStream.on('data') 上使用await。你可以这样做,但它会立即解决。

    将流侦听器包装在 Promise 中并等待它,为此您可以使用 once

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

    【讨论】:

    • 我明白了。我对结尾行的语法感到困惑。异步以括号开头,我不明白这个。和大括号末尾的括号 //this one here -> (async() => { await stream(); // await 只能用在asyncfunction console.log('listening'); } )()//
    猜你喜欢
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    相关资源
    最近更新 更多