2016-12-25 50 views
0

一个varaible我尝试的onmessage函数这里的值赋给一个变量:值分配给中的onMessage中的WebSocket

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首先出现?

+0

onmessage是一个异步调用,因此您不能将值赋给变量 – Codesingh

+0

如果我想将e.data分配给变量并将其用作Web应用程序中的内容,该怎么办? – hln

+0

在onmessage中传递一个回调,然后赋值 – Codesingh

回答

0

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,可以更新我的答案。

+0

为socket_onmessage_callback函数中的数据赋值incomeData,但函数全局变量之外的值仍未定义。 – hln

+0

@hln你不能在你的代码中有'e.data'填充'incomeData',因为在我写给我的答案时,这行代码在''socket'之前执行**。 onmessage'调用。你能看出它是完全意义上的吗?你不能让这个变量被赋予'e.data',因为你在'WebSocket'实际接收到任何消息之前将其打印出来。 –