gpt4 book ai didi

javascript - WebSocket.ws.onmessage 处未捕获类型错误

转载 作者:行者123 更新时间:2023-12-02 22:59:57 24 4
gpt4 key购买 nike

我是网络套接字新手,我正在尝试通过尝试下面的代码来入门。

var id=0; 
var symbol="";
var interval="";
var open_time=0;
var open=0;
var high=0;
var low=0;
var close=0;

var ws = new WebSocket('wss://stream.bybit.com/realtime');

ws.onopen = function(){
//console.log("Socket has been opened!");
ws.send('{"op":"subscribe","args":["kline.BTCUSD.1m"]}');
}

ws.onmessage = function(msg){
//console.log(msg.data);

var obj = JSON.parse(msg.data);
//console.log(obj.data);

id = obj.data.id;
symbol = obj.data.symbol;
interval = obj.data.interval;
open_time = new Date(obj.data.open_time * 1000);
open = obj.data.open;
high = obj.data.high;
low = obj.data.low;
close = obj.data.close;

}

虽然上面的代码工作得很好,但我仍然无法找出下面控制台日志中的错误:

main.js:28 Uncaught TypeError: Cannot read property 'id' of undefined
at WebSocket.ws.onmessage (main.js:28)

我希望有人能给我一个想法,为什么onmessage函数无法在第一次迭代中读取未定义的属性“id”,但在后续迭代中读取它却没有问题循环。

最佳答案

您在此语句中遇到该错误 id = obj.data.id;

在这里,您尝试访问dataid属性。但data未定义,这就是该错误的原因。

您正在从 msg 获取data,该数据是通过套接字连接发送的。确保您第一次发送适当的 msg 值。

这是对该错误的解释。如果您可以发布向此函数发送数据的代码,我们可以找出如何修复该错误。

编辑:

看起来您正在从其他第三方服务器接收数据。如果您可以运行下面的代码,您可以看到收到的第一条消息。

第一条消息:

{"success":true,"ret_msg":"","conn_id":"b75dcae2-48e6-4283-8922-3799a199d8c8",
"request":{"op":"subscribe","args":["kline.BTCUSD.1m"]}}

enter image description here

如您所见,第一条消息没有 data 属性。当您尝试访问它时,您会收到该错误。

data 属性从第二条消息开始出现,因此您在后续消息中不会收到任何错误。

第二条消息:

{ "topic":"kline.BTCUSD.1m",
"data":{
"id":0,"symbol":"BTCUSD", "open_time":1567828500,"open":10349,
"high":10349.5,"low":10349,"close":10349.5,"volume":420020,
"turnover":40.58444293000001,"interval":"1m"
}
}

演示:

var ws = new WebSocket('wss://stream.bybit.com/realtime');

ws.onopen = function() {
//console.log("Socket has been opened!");
ws.send('{"op":"subscribe","args":["kline.BTCUSD.1m"]}');
}

messages = [];

ws.onmessage = function(msg) {

messages.push(msg.data);
console.log(messages[0]);
}

在访问data属性之前,您可以检查它是否不是undefinednull

ws.onmessage = function(msg) {

if(msg && msg.data) {

var obj = JSON.parse(msg.data);

if(obj && obj.data) {
id = obj.data.id;
symbol = obj.data.symbol;
interval = obj.data.interval;
open_time = new Date(obj.data.open_time * 1000);
open = obj.data.open;
high = obj.data.high;
low = obj.data.low;
close = obj.data.close;
}
}
}

关于javascript - WebSocket.ws.onmessage 处未捕获类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57830276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com