'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
参数,并在fn
回调内调用了end
参数。调用它时,我们传递最终的
html
值,然后回调在其data
参数中接收它。这些是非常常见的模式,因此熟悉它们是一个好主意。
关于javascript - node.js中的变量JavaScript不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20556109/