首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js JavaScript中的变量不会更改

node.js JavaScript中的变量不会更改
EN

Stack Overflow用户
提问于 2013-12-12 23:06:26
回答 1查看 786关注 0票数 1
代码语言:javascript
复制
'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。如何使第一段代码执行,然后函数才返回一个变量?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-12 23:07:41

这是因为操作是异步的。这意味着simpleTesthttp.get()响应到达之前很久就返回了。

任何需要响应的代码都必须从回调中调用。在您的示例中,可能会有多个data回调调用,因此您需要在end回调中处理它。

代码语言:javascript
复制
'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()。这使得它更加通用。

代码语言:javascript
复制
'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参数中接收它。

这些是非常常见的模式,因此熟悉它们是个好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20556109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档