[英]Variable in node.js JavaScript doesn't change
'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
。 如何使第一个代码执行,然后函数才返回变量?
这是因为操作是异步的。 这意味着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
参数中接收它。
这些是非常常见的模式,因此熟悉它们是一个好主意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.