我正在通过这个名字很棒的learnyounode工作。 #9是“JUGGLING ASYNC”,指令是将3个URL作为参数并以参数顺序输出内容。我通过包括一个计数器让它工作,但我原来的不起作用:
var http = require('http'),
bl = require('bl'),
store = [],
count = 0; //added later
process.argv.forEach(function(element, index, array) {
if (index > 1) {
http.get(element, function(response) {
response.pipe(bl(function(err, data) {
store[index] = data.toString();
count++; //added later
if (store.length == 3) {
store.forEach(function(e,is,a) {
console.log(e);
});
}
}));
});
}
});
现在,如果你将store.length替换为第12行的count,那么事情就可以了。我只是无法弄清楚为什么数组上的.length还不够。 有人知道吗?
答案 0 :(得分:4)
在javascript数组中,当你给一个空数组一个索引为5的项时,它意味着该数组长度为6项,未定义项0-4。
例如
var x = [];
console.log(x.length); //prints 0;
x[2] = "hello, world";
console.log(x.length); //prints 3;
您正在跳过前两个元素,但仍使用index
,因此当您将第一个元素输入store
时,您将其输入store[2]
,使长度为3 ,count
仅为1时。
答案 1 :(得分:0)
您应该使用count
变量,因为:
例如,当您执行store[1] = data.toString();
时,会得到一个长度为2的数组[undefined, 1]
。并且您希望它为1。