Javascript NodeJs:使用http.get()跨多个“数据”事件收集数据
我必须使用http.get收集多个数据事件,并将它们附加到字符串中,然后将其打印到控制台。最后两个console.log语句始终打印0和空字符串。但是http.get中的console.log会正确打印所有接收到的数据。字符串str是一个全局变量,因此没有范围问题。那么为什么最后一行打印一个空字符串呢Javascript NodeJs:使用http.get()跨多个“数据”事件收集数据,javascript,node.js,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(
// 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
这是处理节点时常见的问题。当您使用http.get时,您正在处理一个异步请求。这意味着最终的console.log语句将在http.get中的回调函数之前被调用 代码中的事件顺序如下所示: 定义str 启动http.get 最后两个console.log语句 从http.get接收数据 添加到str http.get回调中的console.log
所以一切都正常,您只需在收到数据之前请求数据。这是异步java脚本。。这意味着您的JavaScript不会等待上一个函数完成。它异步执行下一条语句。我建议在您的回复完成后使用回电,就像您已有的回复一样。。但是,如果您希望该值超出您的http范围,请获取。考虑使用允诺可能的副本