function emailExist(e) {
const sqlstmt = "SELECT email FROM somewhere WHERE email = ? LIMIT 1";
db.query(sqlstmt, [e], (err, result) => {
//supposed to return 0 or 1
return result.length
});
}
console.info(emailExist('[email protected]')); //returns undefined
Я пробовал использовать переменные, все равно возвращал undefined
Привет Ланрер, не могли бы вы подробнее остановиться на этом вопросе? что вы подразумеваете под «я пытался использовать переменные»? Вы пытались сохранить emailExist('[email protected]') в переменной и распечатать ее?
нет, я объявил переменную сразу после 'function emailExist(e) {', затем я установил ее как 'var something = result.length', а затем я вернул ее 'вернуть что-то', и это все равно дало мне неопределенность



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Проблема в том, что вы пытаетесь вернуть значение из callback.
Чтобы получить значение из callback, которое будет вызвано через определенный промежуток времени. Есть несколько способов решить эту проблему, например, вы можете обернуть callback в Promise:
function query(sqlstmt) {
return new Promise((resolve, reject) => {
db.query(sqlstmt, [e], (err, result) => {
if (err) {
return reject(err);
}
resolve(result.length);
});
})
}
async function emailExist(e) {
const sqlstmt = "SELECT email FROM somewhere WHERE email = ? LIMIT 1";
const result = await query(sqlstmt);
return result;
}
он вернул «Обещание { <ожидание> }»
Скорее всего, вы вызываете функцию emailExist, не дожидаясь ее завершения. Вызов должен быть с ключевым словом await, или попробуйте использовать цепочку Promise следующим образом: emailExist.then ((result) => console.info (result))
returnstmt, на который вы смотрите, предназначен для внутренней анонимной функции, переданнойdb.query. Итак, нетreturnstmt дляemailExist