我正在尝试将从数据事件中接收到的字符串字符存储到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

});


我在了解此行为及其解决方法时遇到了麻烦,我们将不胜感激

谢谢

最佳答案

没有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 :)
    });
});

10-06 04:33
查看更多