繁体   English   中英

node.js中的变量JavaScript不变

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM