node.js中的variablesJavaScript不会更改

'use strict'; var http = require('http'); function simpleTest() { var content = ''; http.get("http://google.com/", function (res) { var html = ''; res.on('data', function (chunk) { html += chunk; }); res.on('end', function () { content = html; }); }); return content; } console.log(simpleTest()); 

为什么variables不会改变,我得到一个空string?

我认为第一个函数显示variables,然后才执行http.get 。 如何使第一个代码执行,只有然后该函数返回一个variables?

这是因为操作是asynchronous的。 这意味着simpleTesthttp.get()响应到达之前很久就返回了。

任何需要响应的代码都必须从callback中调用。 在你的情况下,可能会有多个datacallback的调用,所以你需要在endcallback中处理它。

 'use strict'; var http = require('http'); function simpleTest() { http.get("http://google.com/", function (res) { var html = ''; res.on('data', function (chunk) { html += chunk; }); res.on('end', function () { console.log(html); }); }); } simpleTest(); 

如果你不想硬编码console.log() ,你可以把它放在一个函数中,并将函数传递给simpleTest() 。 这使得它更通用。

 'use strict'; var http = require('http'); function simpleTest(fn) { http.get("http://google.com/", function (res) { var html = ''; res.on('data', function (chunk) { html += chunk; }); res.on('end', function () { fn(html); }); }); } simpleTest(function(data) { console.log(data); }); 

所以在这里我们传递了一个函数给fn参数,并在endcallback中调用了fn参数。

当我们调用它时,我们传递最终的html值,并且callback在它的data参数中接收它。

这些都是很常见的模式,所以熟悉这些模式是个好主意。