Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 知道是否可以从中读取可读流_Node.js_Stream - Fatal编程技术网

Node.js 知道是否可以从中读取可读流

Node.js 知道是否可以从中读取可读流,node.js,stream,Node.js,Stream,我有一个流在流动模式。在继续与它交互之前,我想检查它是否可读: function do_some_stuff_with_stream(stream) { if (stream.canBeReadFrom()) stream.read(10)... } 换言之,要么是结束,要么是错误发生在眼前。现在,流的工作方式似乎是,每次听end时,它都会被激发(即使它已经结束了,所以我猜可以使用它): 但是,“error”的行为不是这样的,因此如果我收到一个错误流,我将永远坐在那里等

我有一个流在流动模式。在继续与它交互之前,我想检查它是否可读:

function do_some_stuff_with_stream(stream)
{
    if (stream.canBeReadFrom())
        stream.read(10)...
}
换言之,要么是结束,要么是错误发生在眼前。现在,流的工作方式似乎是,每次听end时,它都会被激发(即使它已经结束了,所以我猜可以使用它):


但是,“error”的行为不是这样的,因此如果我收到一个错误流,我将永远坐在那里等待,而不是拒绝。

假设您正在从流缓冲区数据事件中读取数据,并且使用socket.io streams和node,并假设“可以从中读取”,则表示数据现在可用,并不是说流是字面上可读的类型

```

```


在决定使用数据之前,if会检查缓冲区是否为“有效”json字符串。

是否尝试检查
stream.readable
?如果它不可读,请立即
reject()
。这会随着错误而改变吗?在“结束”发生后,它当然不会变为false。API文档似乎没有提到它,但我认为它是为了区分可写流和可读流(或者两者都可以),而不是让您知道它是否处于可读状态。它应该更改以指示流是否实际可读,而不是指示流的类型。您使用的是什么节点版本?0.10.36以下代码返回true,尽管流中没有数据:var Readable=require('stream')。PassThrough;var-rs=新的可读性;log(rs.readable)new(require('stream').PassThrough)()。readable在0.12中也返回true。所以它似乎只是说“是的,这是一个可读的东西”,而不是“有数据要读”。我也不知道如何模拟一个错误,所以我不知道它是否会变得不可读
function do_some_stuff_with_stream(stream)
{
    return new Promise(function(resolve, reject)
    {
        var data = stream.read(10);

        if (data !== null)
            resolve(data);
        else
        {
            stream.on("end", reject); // this will happen even if it ended beforehand.
            stream.on("readable", function()
            {
                do_some_stuff_with_stream(stream).then(resolve);
            });
        }
    });
}
cstream.on("data", function (data) {
    buffer += data.toString();

    if (/^[\],:{}\s]*$/.test(buffer.replace(/\\["\\\/bfnrtu]/g, '@').
    replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
    replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
        var tdata = JSON.parse(buffer);
        //add it to our main stage
        drawBiome(worldStage,tdata);
        socket.emit("drawBiomeAvatars");   
    }     

});