带有两个参数的“data”回调不会将buffer.toString()打印为字符串

'data' callback with two arguments does not print buffer.toString() as string

本文关键字:buffer toString 打印 回调 字符串 data 两个 参数      更新时间:2023-09-26

在节点中使用process.openStdin()对象来获取输入,如果回调函数有两个参数,则输出是一个缓冲区:

var stdin = process.openStdin();
stdin.on('data',function(err,chunk){
    if(err)
    {
        console.error(err);
        return;
    }
    console.log(""+chunk.toString('ascii'));
});

输入:abcd

输出:<Buffer 61 62 63 64 0a>

但是,如果回调函数被赋予一个参数,如下所示:

var stdin = process.openStdin();
stdin.on('data',function(chunk){
    // if(err)
    // {
    //  console.error(err);
    //  return;
    // }
    console.log(""+chunk.toString('ascii'));
});

然后输出与输入匹配(即输出abcd)。这是为什么呢?

data事件没有err参数,它们只有一个缓冲区/字符串参数。

如果要侦听

错误,则需要单独侦听流中的error事件。