NodeJs:使用http.get()跨多个“数据”事件收集数据

时间:2017-07-01 17:43:42

标签: javascript node.js

我必须使用http.get()收集多个“数据”事件,并将它们附加到字符串并将其打印到控制台。最后两个console.log()语句总是打印0和一个空字符串。但是http.get()中的console.log()会正确打印所有收到的数据。字符串str是一个全局变量,因此没有范围问题。那么为什么最后一行打印一个空字符串?

// JavaScript File
var http = require('http');

var str = '';

http.get(process.argv[2], function(response){
    response.on('error', console.error);
    response.on('data', function(data){
       str += data.toString();
    });
    response.on('end', function(){
        console.log(str); //works fine, prints the received data
    );
}).on('error', console.error);

console.log(str.length); // prints 0
console.log(str); // prints empty string

1 个答案:

答案 0 :(得分:1)

使用节点时,这是一个常见问题。使用http.get()时,您正在处理异步请求。这意味着您将在console.log()

中的回调函数之前调用最终http.get().语句

使用您的代码,事件的顺序如下:

  • 定义str
  • 发起http.get()
  • 最后两个console.log()陈述
  • http.get()
  • 接收数据
  • 添加到str
  • {li> console.log()http.get()回调中

所以一切正常,你只是在收到数据之前询问数据。