我尝试在此处的 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
并将 e.data
传递给回调函数:
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)
}
如果需要,您甚至可以使用 incomeData
全局变量,但我认为这不是必需的。如果您需要使用 incomeData
,可以更新我的答案。
关于javascript - 在 websocket 中为 onmessage 中的变量赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41322455/