我遇到与变量范围相关的问题。最初将“ 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
}
任何解决方案或此代码的错误之处。
预先感谢
答案 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()
的原因,此时successCount
和failedCount
的值为0
。