知道是否可以读取可读流

时间:2015-03-19 19:27:06

标签: node.js stream

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

function do_some_stuff_with_stream(stream)
{
    if (stream.canBeReadFrom())
        stream.read(10)...
}

换句话说,手头有结束或错误。现在,流似乎工作的方式是每次听到它时结束将继续被触发(即使它已经结束,所以我想可以使用它):

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

然而,"错误"不这样做,所以如果我通过错误流,我会坐在那里等待而不是拒绝。

1 个答案:

答案 0 :(得分:0)

假设您正在读取流缓冲区数据事件,并且您正在使用socket.io流和节点,并假设“可以从中读取”表示数据现在可用,而不是该流的类型是可读的

```

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

});

```

if在判断使用数据之前检查缓冲区是否是“有效”的json字符串。

相关问题