未在控制台中打印函数返回

时间:2021-01-10 14:11:57

标签: javascript node.js function

我有一段用 node.js 编写的代码,但我遇到了问题。

async function CheckearWhitelist(id) {
  const oracheck = ora("Checkeando en la whitelist...").start();
  con.connect(function (err) {
    if (err) {
      oracheck.fail(
        "Ha habido un fallo al conectarse a MySQL - Comprueba la conexión"
      );
    }
    con.query(
      `SELECT * FROM \`whatsapp\`.\`whitelist\` WHERE \`contacto\` = '${id}'`,
      function (err, result, fields) {
        if (err) {
          oracheck.fail("Fallo de MySQL");
        } else if (result == []) {
          oracheck.warn("Usuario no encontrado en la whitelist");
          return false
        } else {
          date = new Date();
          horas_fecha = date.getHours();
          minutos = date.getMinutes();
          hora = `${horas_fecha}.${minutos}`;

          hora_desb = result[0].hora_desbloqueo;
          if (hora_desb == 0) {
            oracheck.info("El contacto está en la whitelist indefinidamente");
            return true
          } else if (hora_desb <= hora) {
            oracheck.warn("Usuario no encontrado en la whitelist");
            return false
          } else {
            oracheck.succeed("Resultado Encontrado: ");
            return true
          }
        }
      }
    );
  });
}

CheckearWhitelist("34676654601@c.us").then((value) => console.log(value));

问题是,如果我制作 console.log(true/false) 而不是 return,它就完美无缺。但是当我返回 true/false 并在调用函数时创建一个 console.log 时,它不起作用。我希望有一个人可以帮助我。谢谢

1 个答案:

答案 0 :(得分:2)

问题是您在那里的异步函数的任何返回值都不会如您所愿返回(它将被丢弃或被库使用 - 但不是您的代码)

当你想“返回”值时,你应该在顶层返回新的 Promise 对象并在回调中解析它。

function CheckearWhitelist(id) {
  return new Promise((resolve, reject) => {
    const oracheck = ora("Checkeando en la whitelist...").start();
    con.connect(function(err) {
      if (err) {
        oracheck.fail(
          "Ha habido un fallo al conectarse a MySQL - Comprueba la conexión"
        );
      }
      con.query(
        `SELECT * FROM \`whatsapp\`.\`whitelist\` WHERE \`contacto\` = '${id}'`,
        function(err, result, fields) {
          if (err) {
            oracheck.fail("Fallo de MySQL");
          } else if (result == []) {
            oracheck.warn("Usuario no encontrado en la whitelist");
            resolve(false)
          } else {
            date = new Date();
            horas_fecha = date.getHours();
            minutos = date.getMinutes();
            hora = `${horas_fecha}.${minutos}`;

            hora_desb = result[0].hora_desbloqueo;
            if (hora_desb == 0) {
              oracheck.info("El contacto está en la whitelist indefinidamente");
              resolve(true)
            } else if (hora_desb <= hora) {
              oracheck.warn("Usuario no encontrado en la whitelist");
              resolve(false)
            } else {
              oracheck.succeed("Resultado Encontrado: ");
              resolve(true)
            }
          }
        }
      );
    });
  })
}

CheckearWhitelist("34676654601@c.us").then((value) => console.log(value));