我在流模式下有一个流。我想在继续与之交互之前检查它是否可读:
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);
});
}
});
}
然而,"错误"不这样做,所以如果我通过错误流,我会坐在那里等待而不是拒绝。
答案 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字符串。