2015-08-24 40 views
0

我有一個HTML文件和兩個<script>標記。在一個標籤中,我使用socket.io庫來接收數據,並在另一個標籤中處理它。我的代碼如下 -在腳本標記之間複製變量值

<script> 
nwmsg=[]; 
var socket = io.connect('http://localhost:3000/'); 

socket.on('message', function (data) { 
    nwmsg=data.readings.slice(); 
    console.log('received a message: ', nwmsg[0]); // Log A 
}); 
</script> 

<script> 
. 
. 
var temps=nwmsg.slice(); 
console.log(temps[0]);  // Log B 
. 
. 
</script> 

在腳本,我已標記兩個日誌語句作爲日誌A和B.登錄登錄甲正確打印所接收的數據(是JSON對象的陣列)。但是,日誌B在控制檯上顯示爲undefined

任何人都可以弄清楚我在這裏犯了什麼錯誤嗎?

感謝

回答

1

這是不是兩個腳本標籤,但異步的問題之間的「複製」的問題。 socket.io傳遞消息需要一些時間。基本上,在消息到達客戶端之前,您正在做日誌B. 這就是socket.io使用回調來確保消息已經到達的原因。因此,總而言之:如果你想從socket.io消息中訪問數據,你必須在它的回調函數或函數中執行它,只有在這個成功的回調之後才能執行它。

<script> 
nwmsg=[]; 
var socket = io.connect('http://localhost:3000/'); 

socket.on('message', function (data) { 
    nwmsg=data.readings.slice(); 
    console.log('received a message: ', nwmsg[0]); // Log A 
    nwmsgSlice(); 
}); 
</script> 

<script> 
. 
. 
var temps; 
function nwmsgSlice() { 
    temps=nwmsg.slice(); 
    console.log(temps[0]);  // Log B 
} 
. 
. 
</script> 
+0

異步性確實是問題所在。感謝您的快速解決方案。 – Rohan