首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Javascript:变量值在循环中从不更改

Javascript:变量值在循环中从不更改
EN

Stack Overflow用户
提问于 2017-02-24 04:57:10
回答 2查看 151关注 0票数 1

代码如下:

代码语言:javascript
运行
复制
 var link, summary;
 for (var i = 0; i < json.cards[0].widgets.length; i++) {
    link = json.cards[0].widgets[i].text;
    var params = {
        // various parameters
    };
    var req = http.request(params, function(res) {
        res.on('data', function(data) {
            summary = JSON.parse(data.toString()).content;
            // Now, the process method takes "summary" correctly, 
            // but "link" is always the same, hence, not changing 
            // on every other cycle.
            process(summary, link);
            // That's how it would look if looped 3 times
            // process('positive', 'http://www.google.com/blah');
            // process('negative', 'http://www.google.com/blah');
            // process('neutral', 'http://www.google.com/blah');
        });
    });
    req.end();
 }

正如我在代码中注释的那样,link永远不会改变,它采用第一个值,然后process()始终采用相同的link值,而summary总是不同的,这是意料之中的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-24 05:12:32

Alon Eitan帮助我解决了这个问题,他建议将它分离在一个单独的函数中,并且它起作用了。这就是我的代码现在的样子:

代码语言:javascript
运行
复制
 var link, summary;
 for (var i = 0; i < json.cards[0].widgets.length; i++) {
    link = json.cards[0].widgets[i].text;
    var params = {
        // various parameters
    };
    var sent = function(link, params){
        var req = http.request(params, function(res) {
            res.on('data', function(data) {
                summary = JSON.parse(data.toString()).content;
                process(summary, link);
            });
        });
        req.end();
    }
    sent(link, params);
 }
票数 2
EN

Stack Overflow用户

发布于 2017-02-24 04:59:54

req是一个异步函数,因此不能保证与外部循环相比,它返回的顺序是什么。因此,在这种情况下,几乎可以肯定的是,外部循环甚至在请求返回之前就结束了,因此link总是相同的。

与其这样做,不如尝试使用promises,或者将link的值作为参数传递给请求,以便每次返回时都有正确的值。

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

https://stackoverflow.com/questions/42426028

复制
相关文章

相似问题

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