JavaScript函数是否通过引用传递“超范围”变量?

时间:2015-02-26 06:46:36

标签: javascript node.js asynchronous

使用NodeJS调用HTTP API我遇到了一种奇怪的行为。我有一个API调用,它返回一个ID数组,并且在每个ID上我需要以ID作为参数发出另一个HTTP请求。我最终得到了这段代码:

http.get("/getPersons", function(persons) {
    for(var i = 0; i < persons.length; i++) {
        var count = 0;

        http.get("/getPersonAddress?id=" + persons[i].id, function(address) {
            persons[i].address = address;
            count++;

            if(count == persons.length) {
                res.end(JSON.stringify(persons));
            }
        });
    }
});

现在,由于循环在所有HTTP请求收到响应之前完成,i将等于persons.length + 1,并且看起来传递给回调函数的i变量已通过通过引用而不是值,因为当我运行此代码时,它会抱怨persons[i].address未定义,当我看到i此时我看到它等于persons.length + 1而不是ihttp.get被调用的那一刻{{1}}。

你通常如何解决这个问题?

0 个答案:

没有答案