Как получить результаты запроса, который находится внутри функции

Я пытаюсь создать систему «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», где-то еще.

Итак, если вы вызываете var admin = isAdmin('something') из любого места в вашем коде, что возвращается?

GrafiCode 27.05.2019 16:34
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
1
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что функция, вызывающая 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 в моем запросе больше не работает

typicallearner 27.05.2019 17:15

do isAdmin(varr).then(res => {console.info(res)}, если res содержит нужную информацию, то все готово. Напишите весь свой код, который зависит от результата, внутри обратного вызова then функция.

Cal Irvine 27.05.2019 17:20

Я настоятельно рекомендую узнать больше о том, как работает асинхронный javascript, а затем узнать немного больше о обещаниях и о том, как они работают. Это может занять некоторое время, чтобы осознать, но как только вы это сделаете, это откроет для вас целый новый мир и может даже просто взорвать ваш мозг. Затем узнайте об async/await. Эти концепции имеют решающее значение как для фронтенда, так и для бэкенда JS-разработки.

Cal Irvine 27.05.2019 17:28

Другие вопросы по теме