我有一段用 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 时,它不起作用。我希望有一个人可以帮助我。谢谢
答案 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));