2016-12-25 82 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'實際接收到任何消息之前將其打印出來。 –