Как я могу получить значения http.get?

1

Я думаю, что я запутался в области JavaScript. Когда я попытался выполнить следующий код (используя Node.js), я не смог получить какой-либо вывод из второго "console.log()". В этой программе, я думаю, значение переменной должно иметь некоторое значение после выполнения http.get(), поскольку переменная value находится в глобальной области. Но возвращаемое значение против моего ожидания.

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?

Я хотел бы знать, что происходит. Заранее спасибо!

(следующий текст является дополнением)

Большое спасибо трем парням, которые дали мне ответ! Я задерживал выполнение второй console.log(), используя setTimeout следующим образом. Но у меня все еще такая же проблема. Интересно, как я могу получить ценность.

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);
Теги:

3 ответа

2

Вы определяете функцию обратного вызова на http.get, а затем выполняете ее, поэтому, выполняя конечное значение console.log, устанавливается value BEFORE. Тем временем, я не знаю, вызван ли ваш обратный вызов. Попробуйте добавить некоторые дополнительные инструкции console.log чтобы убедиться, что ваш поток выполнения - это то, что вы ожидаете.

2

Ключ здесь - асинхронные обратные вызовы.

Случается, что function(res) {...} вызывается и когда http.get завершается, и там она добавит значения к value. Однако после http.get он будет регистрировать value когда оно еще не заполнено.

Таким образом,

  1. http.get
  2. console.log называется
  3. http.get закончен, function(res) {...} вызывается
1

HTTP-запрос является асинхронным. Вторая консоль.log() (где value переменной не имеет значения) на самом деле вызывается перед возвратом запроса и, следовательно, имеет то же значение, с которой она была инициализирована.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню