Я пытаюсь создать систему «AdminCheck», которая будет проверять, является ли пользователь администратором, и возвращать уровень администратора пользователя на основе информации, собранной из базы данных.
Я провел некоторое исследование и понял, что моя проблема связана с асинхронностью запроса, но я не смог найти больше
function isAdmin(varr){
let queryCheck = "SELECT AdminLVL FROM accounts WHERE username = ?"
pool.query(queryCheck, [varr], (err,results) => {
console.info(results[0].AdminLVL) // This gives me results
if (err){
console.info(err)
}
else {
return results[0].AdminLVL
}
})
}
прямо там, где я прокомментировал «Это дает мне результаты», все работает нормально, но я хочу иметь возможность использовать результат, который, допустим, «300», где-то еще.
Проблема в том, что функция, вызывающая isAdmin, выполняется асинхронно и не ждет результатов. Измените isAdmin, чтобы вернуть обещание https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise Затем вы можете написать остальную часть своего кода в isAdmin(varr).then(res => { // ваш код }) Или вы можете использовать асинхронное ожидание.
отредактируйте, чтобы добавить код: Сделайте что-нибудь в этом направлении (просмотрите документы, чтобы заставить его работать именно так, как вам нужно)
isAdmin(varr) {
return new Promise((resolve, reject) => {
let queryCheck = "SELECT AdminLVL FROM accounts WHERE username = ?"
pool.query(queryCheck, [varr], (err,results) => {
console.info(results[0].AdminLVL) // This gives me results
if (err){
reject(err);
}
else {
resolve(results[0].AdminLVL);
}
});
});
теперь, когда я пытаюсь console.info(isAdmin(varr))
, я получаю Promise { <pending> }
, и мой console.info в моем запросе больше не работает
do isAdmin(varr).then(res => {console.info(res)}, если res содержит нужную информацию, то все готово. Напишите весь свой код, который зависит от результата, внутри обратного вызова then функция.
Я настоятельно рекомендую узнать больше о том, как работает асинхронный javascript, а затем узнать немного больше о обещаниях и о том, как они работают. Это может занять некоторое время, чтобы осознать, но как только вы это сделаете, это откроет для вас целый новый мир и может даже просто взорвать ваш мозг. Затем узнайте об async/await. Эти концепции имеют решающее значение как для фронтенда, так и для бэкенда JS-разработки.
Итак, если вы вызываете
var admin = isAdmin('something')
из любого места в вашем коде, что возвращается?