为什么js在更改为for循环时不会发送数据

时间:2018-03-30 22:11:13

标签: javascript node.js

在服务器上反复发送一个数组元素时,此函数有效。

var data = [];
var arrayLength = data.length;

data[0] = "500,400,399";
data[1] = "453,544,3333";
data[2] = "g44,tyt,rraa";
data[3] = "g45,343434,43333";

function sendWind() {
    console.log('Wind sent to user');
    io.emit('chat message', data[0]);
}
setInterval(sendWind, 3000);

但是当我将其更改为for循环以发送数组的所有元素时,它不会发送任何内容。

function sendWind() {
    for (var i = 0; i < arrayLength; i++) {
        console.log('Wind sent to user');
        io.emit('chat message', data[i]);
    }
}
setInterval(sendWind, 3000);

2 个答案:

答案 0 :(得分:3)

在为数组分配元素之前检查数组长度。将行切换为:

data[0] = "500,400,399";
data[1] = "453,544,3333";
data[2] = "g44,tyt,rraa";
data[3] = "g45,343434,43333";

var arrayLength = data.length;

否则,arrayLength将为0。

答案 1 :(得分:2)

var data = [];
var arrayLength = data.length;

data[0] = "500,400,399";
data[1] = "453,544,3333";
data[2] = "g44,tyt,rraa";
data[3] = "g45,343434,43333";

让我们了解发生了什么:   - 声明数据(长度为0的数组)   - 声明一个var arrayLength,它等于data.length = 0   - 您尝试访问数据[i],其中我从0开始到arrayLength = 0

所以你需要的是在data [0],data [1],data [2],data [3]之后声明arrayLength,或者在你需要它时使用data.length来声明arrayLength:

function sendWind() {
    for (var i = 0; i < data.length; i++) {
        console.log('Wind sent to user');
        io.emit('chat message', data[i]);
    }
}