arrays - 退出循环后我的计数器被重置
问题描述
count
每次第二个循环退出后,我的计数器都会重置,forEach
但它并不意味着要重置,因为当我在第二个循环内进行控制台登录时,数字是正确的,但没有运气。
let arr = [];
var count;
result.forEach(server => {
count = 0;
sql.query(`SELECT * FROM users WHERE server='${server.server}';`, async (error, results) => {
if (error) {
console.log(error);
}
results.forEach(user => {
if(user.key_deactivated == 'false') {
count++;
}
});
console.log(count);
});
arr.push({
server: server.server,
name: server.name,
plan_id: server.plan_id,
mb_stripe: server.mb_stripe,
description: server.description,
key_stock: server.key_stock,
channel: server.channel,
active: count
});
});
res.render('pages/administrator', {result: result, user: req.user, arr: arr});
解决方案
您正在使用回调函数,而回调函数是异步行为的一部分。意味着 js 将其推送到回调队列中以便稍后执行。因此在回调可以更改之前访问计数值。
let arr = [];
var count;
result.forEach(server => {
count = 0;
sql.query(`SELECT * FROM users WHERE server='${server.server}';`, async (error, results) => {
if (error) {
console.log(error);
}
results.forEach(user => {
if(user.key_deactivated == 'false') {
count++;
}
});
console.log(count);
arr.push({
server: server.server,
name: server.name,
plan_id: server.plan_id,
mb_stripe: server.mb_stripe,
description: server.description,
key_stock: server.key_stock,
channel: server.channel,
active: count
});
res.render('pages/administrator', {result: result, user: req.user, arr: arr});
});
});
有关回调的更多信息,请查看此。https://developer.mozilla.org/en-US/docs/Glossary/Callback_function
推荐阅读
- r - R - 如何使用不同的空间 data.frames 编写嵌套的 for 循环
- angular - 使用 ngFor 循环非数组变量
- r - 随机森林给了我 0% 的准确率
- java - 使用测试运行器进行两个不同的测试 JUnit
- python - 属性错误:__enter__
- c# - 将多行电子邮件解析为 var
- javascript - CORS 策略:没有“访问控制允许来源”/500(内部服务器错误)问题
- python - 使用 Entrez 以 GFF 格式查找 NCBI 核苷酸的注释数据
- python - IndentationError:仅使用制表符时需要缩进块?
- c++ - 由于缺少 -pthread,CMake check_symbol_exists 不起作用