我正在尝试将从数据事件接收到的字符串字符存储到k
,但似乎k
仅在.on函数中持久存在而不在函数外面
var http = require('http');
var url = process.argv[2];
http.get(url, function(res){
k = [];
res.on('data', function(data){
//console.log(data.toString());
k.push(data.toString());
console.log(k); // k stores a list string when .on is called
});
console.log(k); // k is empty
});
我无法理解这种行为以及如何修复它,任何帮助都会受到赞赏
由于
答案 0 :(得分:1)
问题是时间问题,而不是范围问题。最后的console.log
语句在连接事件监听器之后立即运行,该监听器在监听器功能运行之前。您需要在k
事件的监听器中对完整数组end
执行任何操作:
res.on('end', function(){
console.log(k);
});
答案 1 :(得分:1)
如果没有var语句,你会泄漏到global.k,但是变量范围不是你的问题。你的问题是时间。在任何数据进入之前,您的console.log(k); // k is empty
正在运行,因此它当然是空的。你只需要等到你拥有所有数据并且res发出结束事件。
var http = require('http');
var url = process.argv[2];
http.get(url, function(res){
var k = [];
res.on('data', function(data){
k.push(data.toString());
console.log(k); // k stores a list string when .on is called
});
res.on('end', function() {
console.log(k); // k is full :)
});
});
答案 2 :(得分:0)
在声明k:
时尝试输入 varhttp.get(url, function(res){
var k = []; // intialize k with var.
res.on('data', function(data){
//console.log(data.toString());
k.push(data.toString());
console.log(k); // k stores a list string when .on is called
});
console.log(k); // k is empty
});
尝试将k声明为全局变量。
var http = require('http');
var url = process.argv[2];
var k = []; // initialize k here.
http.get(url, function(res){
res.on('data', function(data){
//console.log(data.toString());
k.push(data.toString());
console.log(k); // k stores a list string when .on is called
});
console.log(k); // k is empty
});