我尝试在这里为onmessage函数中的变量分配一个值:
socket = new WebSocket(ws_scheme +"127.0.0.1:8000/chat/");
var incomeData;
socket.onmessage = function(e) {
incomeData='hello'+ e.data;
console.log('inside function:'+incomeData)
}
socket.onopen = function() {
socket.send(" from websocket");
}
console.log(incomeData)
控制台将显示第一个未定义的日志,第二个显示“内部功能:来自websocket的问候”。如何获得分配的变量并将值也保留在函数之外?为什么第二个console.log首先出现?
最佳答案
incomeData
是在全局范围内定义的,在第一次使用console.log(incomeData)
打印时未分配任何内容,因此您会收到undefined
错误消息。然后调用套接字onmessage
,并为您分配了e.data
值,然后将其打印出来。
您可以处理console.log
并将socket.onmessage
传递给回调函数,如下所示:
socket = new WebSocket(ws_scheme +"127.0.0.1:8000/chat/");
socket.onmessage = function(e) {
socket_onmessage_callback(e.data);
}
socket.onopen = function() {
socket.send(" from websocket");
}
function socket_onmessage_callback(data) {
console.log('inside function socket_onmessage_callback:', data)
}
如果需要,甚至可以使用
e.data
全局变量,但是我认为这不是必需的。如果您需要使用incomeData
,可以更新我的答案。