在脚本标签之间复制变量值
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>
我有一个带有两个 <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>