在回调函数内部访问全局变量

时间:2020-02-12 09:43:34

标签: javascript node.js

我遇到与变量范围相关的问题。最初将“ successCount”和“ failedCount”变量设置为“ 0”,并在每次成功/失败迭代后递增该值。但是迭代之后,仅获得这些变量的初始值。

var successCount = 0;
var failedCount = 0;
var counter = 0;
var data = {};
for (var i = 0; i < 5; i++) {
    updateField(data, (response) => {
        if (response.status) {
            successCount++;
        } else {
            failedCount++;
        }
    });
    counter++;
}

在循环外访问变量

if(counter === 5) {
console.log(successCount);// Value is still 0
console.log(failedCount);//  Value is still 0
}

任何解决方案或此代码的错误之处。

预先感谢

2 个答案:

答案 0 :(得分:0)

由于变量已在回调中更新,因此需要确保在回调之前未调用console.log。

您可以尝试将更新功能转换为可以解决所有功能后运行控制台日志的承诺。

var successCount = 0;
var failedCount = 0;
var counter = 0;
var data = {};

function asyncUpdateField(data) {
    return new Promise((resolve) => {
        updateField(data, (response) => {
            if (response.status) {
                successCount++;
            } else {
                failedCount++;
            }
            resolve();
        });
    });
}
const promisesUpdateField = [];

for (var i = 0; i < 5; i++) {
    promisesUpdateField.push(asyncUpdateField(data));
}

Promise.all(promisesUpdateField).then(() => {
    console.log(successCount);// Value is still 0
    console.log(failedCount);//  Value is still 0
});

答案 1 :(得分:0)

看来,函数updateField可能是异步的。这就是为什么在执行该函数之前调用console.log()的原因,此时successCountfailedCount的值为0

相关问题