如何获取http.get的值

How can I get values of http.get?

本文关键字:http get 的值 获取 何获取      更新时间:2023-09-26

我想我对JavaScript的作用域感到困惑。当我尝试以下代码(使用Node.js(时,我无法从第二个">console.log(("中获得任何输出。在这个程序中,我认为执行http.get((后,值变量应该有一些值,因为的值变量在全局范围内。但回报价值与我的预期相悖。

var http = require('http');
var options = {
    host: "www.example.com",
    path: "/index.html",
    port: 80
};
var value = "";
var ret = http.get(options, function(res) {
                       res.on("data", function(chunk) {
                                  value += chunk;
                              });
                       res.on("end", function(chunk) {
                                  console.log(value); // have some value...
                              })
                   });
console.log(value); // don't have any value...why?

我想知道发生了什么事。提前谢谢!

(以下文本为补充(

非常感谢三个人给了我答案!我使用setTimeout延迟了第二个console.log((的执行,如下所示。但我仍然有同样的问题。我想知道如何才能获得价值。

var http = require('http');
var options = {
    host: "www.example.com",
    path: "/index.html",
    port: 80
};
var value = "";
var ret = http.get(options, function(res) {
                       res.on("data", function(chunk) {
                                  value += chunk;
                              });
                       res.on("end", function(chunk) {
                                  console.log("first: " + value); // have some value...
                              })
                   });
setTimeout(function() {
               console.log("second: " + value); // don't have any value...why?
           }, 5000);

您在http.get上定义了一个回调函数,然后通过执行,因此执行最终的console.log,设置为BEFORE value。与此同时,我不知道你的回拨是否真的被呼叫了。尝试添加一些额外的console.log语句,以确保您的执行流符合您的期望。

这里的关键是异步回调。

发生的情况是调用function(res) {...},当http.get完成时,它将向value添加值。然而,在http.get之后,当它还没有被填充时,它将记录value

所以基本上,

  1. 调用http.get
  2. 调用console.log
  3. http.get结束,调用function(res) {...}

http请求是异步的。第二个console.log(((其中变量value没有值(实际上是在请求返回之前调用的,因此,它具有与初始化时相同的值。