2015-08-24 22 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