在脚本标签之间复制变量值

Copy variable value between script tags

我有一个带有两个 <script> 标签的 HTML 文件。在一个标签中,我使用 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>

在脚本中,我将两个日志语句标记为 Log A 和 Log B。Log A 正确打印接收到的数据(data.readings 是一个 JSON 对象的数组)。但是,日志 B 在控制台上显示为 undefined

任何人都可以找出我在这里犯了什么错误吗?

谢谢

不是两个script标签之间"copying"的问题,而是异步的问题。 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>