我尝试在这里为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,可以更新我的答案。

10-07 16:17