请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,然后我使用pako.inflate() 返回的还是一样的数据

    let socket = new WebSocket("wss://api-aws.huobi.pro/ws");

socket.onopen = function(e) {

alert(" 连接已建立");

var data = {

"sub": "market.btcusdt.ticker"

}

socket.send('"sub": "market.btcusdt.ticker"');

console.log(data)

};

const pako = require('pako'); //引入

socket.onmessage = function(event) {

console.log(`接收到数据: ${event.data}`);

// console.log(event)

if (event.data instanceof Blob) {

let result = '';

let reader = new FileReader();

console.log( reader) //这里面的result打印出是 "\u001f‹\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000-ÊK

//FileReader:从Blob对象中读取数据

reader.onload = function() {

result = JSON.parse(pako.inflate(reader.result, {

to: 'string'

}));

// console.log(result)

//pako.inflate()对数据进行解压,得到正常的json对象

if (result.ping) {

socket.send(JSON.stringify({

pong: result.ping

}));

//响应服务器,避免断开连接

}

}

reader.readAsBinaryString(event.data);

//将返回的数据解析为字符串格式 这里打印上面这个没有反应

}

};

websocket他请求返回的原样子
请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

数据格式 这是打印reader的数据请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

下面这个是打印出来的event的数据 请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

请教一下 这是为什么 这个方法我也是网上百度到的 说要这么解决 但是我解决出来 数据还是没有变成字符串

补充的::::::: 打印 reader.result
我如果下面是使用eader.readAsArrayBuffer(event.data);的话 他就是这种格式
请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

如是使用eader.readAsArrayBuffer(event.data);的话 他就是这种格式

请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()

reader.result------arraybuffer
请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate()


回答:

感觉是调用错函数了,你调用的是 reader.readAsArrayBuffer() 吗?试试:

reader.readAsArrayBuffer(event.data);

reader.onload = function() {

result = JSON.parse(pako.inflate(reader.result, {

to: 'string'

}));

以上是 请求返回的数据是一个Blob对象,存储的是二进制数据。 所以需要先从Blob对象中提取数据,pako.inflate() 的全部内容, 来源链接: utcz.com/p/936583.html

回到顶部