2016-09-29 75 views
1

我有node.js中的數據和socket.io問題。可以在socket.on函數之外獲取數據嗎?例如:Node.js和socket.on數據

var newdata=new Array(); 
$(document).ready(function(){ 


socket.on('Select', function(data){ 


    //console.log(data.products[0][1]); 
    for(i=0; i<data.products[0].length; i++) 
    { 
     newdata.push(data.products[0][i]); 

    } 
     console.log(newdata); //array with objects 
}); 


console.log(newdata); //undefined - here i want to get data 
+0

是啊,這是可能的,聲明一個全局的外部變量並重新分配該變量帶有用於外部的數據或將其傳遞給另一個函數中使用的方法。 'on'方法是一個在運行時調用的事件監聽器。所以你需要回調函數。 –

回答

2

你必須在這種情況下,使用一個回調函數,因爲socket.on被異步調用。

例如,聲明這樣的功能:

function processData(newdata) { 
    console.log(newdata); 
} 

內。然後你socket.on('Select', function (data) { ... });你可以調用processData(newdata),如下圖所示:

function processData(newdata) { 
    console.log(newdata); 
} 

$(document).ready(function(){ 


    socket.on('Select', function(data){ 

     for(i=0; i<data.products[0].length; i++) 
     { 
      newdata.push(data.products[0][i]); 
     } 

     processData(newdata); 
    }); 
}); 
+0

是不是和console.logging中的socket.on()回調一樣?不會宣佈全局變量會更好? – kalin

+0

絕對,但我想他想在這個功能之外處理它,出於某些原因。 – simdrouin