Если вы используете последнюю версию Node.js (7.6+), я бы посоветовал вам переключиться на библиотеку, которая поддерживает обещания, а не только обратные вызовы.Это облегчит обработку асинхронных операций, используя async
/ await
.Хорошим кандидатом может быть пакет sqlite .
После того, как вы переключитесь на него (это очень легко сделать, они похожи), вам просто нужно сделать вашу get_all_emails
функцию асинхронной.Вот как это будет выглядеть:
async function get_all_emails() {
const emails = (await db.all("SELECT email FROM users", [])).map((row) => row.email);
return emails;
}
Приведенный выше код извлекает строки, используя await db.all
, и сопоставляет их с электронными письмами для создания массива.Вы можете вызвать эту функцию откуда-то еще, используя await get_all_emails()
(если она вызывается асинхронной функцией) или get_all_emails().then((emails) => {...}).catch((err) => {...})
.
Тем не менее, лучшее, что можно сделать, чтобывы хотите получить только те строки, которые соответствуют электронной почте, и проверить, равна ли длина найденных строк 0.
async function is_email_available(email) {
const rows = await db.get('SELECT id FROM users WHERE email = ?', email);
return rows.length === 0;
}
Это вернет true
, если электронное письмо доступно, и false
, если нет.
Надеюсь, это поможет!