'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。如何使第一个代码执行,然后函数才返回变量?

最佳答案

这是因为操作是异步的。这意味着simpleTesthttp.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/

10-09 08:04
查看更多