'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());为什么变量不变,我得到一个空字符串?
我认为第一个函数显示变量,然后执行http.get。如何使第一段代码执行,然后函数才返回一个变量?
发布于 2013-12-12 23:07:41
这是因为操作是异步的。这意味着simpleTest在http.get()响应到达之前很久就返回了。
任何需要响应的代码都必须从回调中调用。在您的示例中,可能会有多个data回调调用,因此您需要在end回调中处理它。
'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参数,并在end回调中调用fn参数。
调用它时,我们传递最后的html值,回调在其data参数中接收它。
这些是非常常见的模式,因此熟悉它们是个好主意。
https://stackoverflow.com/questions/20556109
复制相似问题