@K1NDER

Как вернуть функцию?

function CheckLogin(login)
{
    DataBase.Handle.query('SELECT * FROM `users` WHERE `login` = ?', [login], function(err, result, row) {
        if(result.length > 0) {
            console.log(result);
            return true; // Т.к. тут находится вторая функция мы возвращаем значение из нее, но не выходим из основной
        }
    });
    return false; // Возвращаем false, но нам нужен true, даже если удалить этот return, то тот не вернется, т.к. функций 2
}


Возможно ли реализовать по другому?
  • Вопрос задан
  • 163 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Это называется асинхронность. Гугли на тему, информации вагон.
Если вкратце, то: вызов функции происходит сейчас, возврат из функции получается сразу после вызова, а ответ из базы приходит когда-нибудь потом, когда база подумает.
Варианта всего два:
1. использовать callback - функцию которая будет вызвана поле завершения запроса(та самая function(err, result, row) {);
2. использовать Promise
function CheckLoginPromise(login){
  return new Promise(
    (resolve, reject) => DataBase.Handle.query('SELECT * FROM `users` WHERE `login` = ?', [login], function(err, result, row) {
      if(err) return reject(err);
      if(result.length > 0) {
        console.log(result);
        return resolve(true); 
      }
      resolve(false); 
    })
  )
}

CheckLoginPromise(login).then(bool => {
  // делаем что-то
})

2а. использовать async\await сахар для Promise.const bool = await CheckLoginPromise(login);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы