Mike_Ro
@Mike_Ro
Чистейший колумбийский ЖеЭс

Как правильно вернуть true из функции?

Всем привет!
Пытаюсь вместо console.log('Новая игра!'); получить 1 или true в результате отработки функции.

Функция на данный момент:
- работает, проблем нет.
function next_game() {
    // смотрим номер настоящей игры
    var thisGame1 = this_game();
    setTimeout(function () {
        // спустя время заново смотрим номер настоящей игры
        var thisGame2 = this_game();
        // если номера игр различны, значит наступила новая игра
        if (thisGame1 != thisGame2) {
            console.log('Новая игра!');
        } else {
            console.log('Старая игра...');
        }
    }, 3000);
}

setInterval(function () {
    next_game();
}, 3000);


Пробую так:
- выводит undefined, почему? Ведь есть понятный возврат true или false...
function next_game() {
    // смотрим номер настоящей игры
    var thisGame1 = this_game();
    setTimeout(function () {
        // спустя время заново смотрим номер настоящей игры
        var thisGame2 = this_game();
        // если номера игр различны, значит наступила новая игра
        if (thisGame1 != thisGame2) {
            return true;
        } else {
            return false;
        }
    }, 3000);
}

setInterval(function () {
    console.log(next_game());
}, 3000);


Так как получить на выходе true или false?
Спасибо!
  • Вопрос задан
  • 1342 просмотра
Решения вопроса 3
BuriK666
@BuriK666
Компьютерный псих
Тут вам нужны promise
Ответ написан
Комментировать
staffID
@staffID
А что вообще возвращает next_game?
У неё ведь даже return нету.

Получается так, что return возвращает callback функция в setTimeout,
но setTimeout ничего не возвращает.
Вам здесь другая логика нужна.
Либо как Выше упомянуто Промисы, либо цепочка вложенных callback'ов.
Ответ написан
ybiks
@ybiks
Студент
Ну начнём с того что у вас одновременно работают 2 счётчика, это плохо как с эстетический точки зрения так и с производительной. Ваша проблема в том что функции timeout и interval`Асинхронны`. Я бы стал использовать внешнюю переменную:
var game;
setInterval(function(){
  var gameNow = this_game();
  if(game != gameNow){
    game = gameNow;
    console.log('Выполним что хотим');
  }else{
   console.log('Не выполним что хотим');
  }
}, 3000)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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