节点的JSvariables作用域与响应和http方法

我仍然试图解决这个问题,但这对我来说很困惑。 所以我使用http.get和一个pipe道与bl模块,我想它改变的内容,所以我可以使用它的function不工作,为什么? 我以为var会在我的文件中是全局的,这将允许我改变它。

var http = require('http'); var bl = require('bl'); var url1 = process.argv[2]; var content; http.get(url1, function(response){ response.pipe(bl(function(err,data){ return data.toString(); })); }); console.log(content.length); console.log(content); 

你想修改content吗? 你永远不会分配任何东西,然后尝试同步访问它(这几乎肯定会在get完成之前发生)。 我假设你想要做更多的事情:

  ... var content; http.get(url1, function(response){ response.pipe(bl(function(err,data){ content = data.toString(); console.log(content.length); console.log(content); })); }); 

Node.js是asynchronous的,这意味着你的get函数下面的代码可能会在你的callback函数(你作为第二个parameter passing的函数)内部的代码之前被执行。

  var http = require('http'); var bl = require('bl'); var url1 = process.argv[2]; var content; http.get(url1, function(response){ response.pipe(bl(function(err,data){ // After all callbacks have come back, modify content content = data.toString(); // Set the value of content console.log(content.length); console.log(content); return content; })); }); // The callback function in get still hasn't been called! console.log(content); // undefined