我必须使用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
答案 0 :(得分:1)
使用节点时,这是一个常见问题。使用http.get()
时,您正在处理异步请求。这意味着您将在console.log()
http.get().
语句
使用您的代码,事件的顺序如下:
str
http.get()
console.log()
陈述http.get()
str
console.log()
在http.get()
回调中
所以一切正常,你只是在收到数据之前询问数据。