首页 > 解决方案 > 退出循环后我的计数器被重置

问题描述

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});

标签: arraysnode.jscount

解决方案


您正在使用回调函数,而回调函数是异步行为的一部分。意味着 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


推荐阅读