Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NodeJs:使用http.get()跨多个“数据”事件收集数据_Javascript_Node.js - Fatal编程技术网

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

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(

我必须使用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

这是处理节点时常见的问题。当您使用http.get时,您正在处理一个异步请求。这意味着最终的console.log语句将在http.get中的回调函数之前被调用

代码中的事件顺序如下所示:

定义str 启动http.get 最后两个console.log语句 从http.get接收数据 添加到str http.get回调中的console.log
所以一切都正常,您只需在收到数据之前请求数据。

这是异步java脚本。。这意味着您的JavaScript不会等待上一个函数完成。它异步执行下一条语句。我建议在您的回复完成后使用回电,就像您已有的回复一样。。但是,如果您希望该值超出您的http范围,请获取。考虑使用允诺可能的副本