2015-10-15 2 views
-3

Я написал функцию, которая при вызове возвращает только 5, но когда я console.log функция внутри setInterval(), она возвращает именно то, что я ожидаю. Так почему же это не срабатывает при вызове?setInterval() не работает по назначению

function countdown(seconds){ 
    var tick = 0; 

    setInterval(function() { 
    if (seconds > tick) { 
     seconds--; 
     console.log(seconds); //counts down as expected. 
    } 
    }, 1000); 
    return seconds; 

} 

console.log(countdown(5)); //returns undefined. 

Кроме того, я знаю SetTimeout() является предпочтительным, но когда я выгрузить setInterval не работает. Любая помощь и ясность в этом вопросе были бы весьма полезны.

+3

Поскольку обратный отсчет не возвращает ничего, поэтому он не определен. Что вы ожидаете от входа в систему? – epascarello

+0

1. функция, выполняемая setInterval, запускается асинхронно 2. для того, чтобы console.log регистрировал что-либо, кроме неопределенного, функция должна была бы вернуть что-то 3., поскольку вы редактируете, где вы возвращаете секунды, console.log теперь должен выводить 5 , так что вы должны отредактировать свой вопрос, поскольку он теперь некорректен. –

+0

Да, он возвращает только 5. Извиняется за то, что он не отправил его таким образом, чтобы начать. Я несколько раз общался с ним и забыл добавить это обратно. Мое предположение заключается в том, что он возвращает всего 5, потому что он асинхронен? – London804

ответ

0

// возврат не определен.

Потому что seconds не определяется, когда функция возвращается. См. Тело функции. setInterval не вызывается до возвращения функции.

function countdown(seconds){ 
    var tick = 0; 

    setInterval(function() { 
    if (seconds > tick) { 
     seconds--; 
     console.log(seconds); //counts down as expected. 
    } 
    }, 1000); 

    // NOTHING HAS ASSIGNED TO seconds TILL THIS POINT 
    return seconds; 

} 

Вы, вероятно, хотите, чтобы вернуть то, что получает разрешенное на более позднем этапе иначе. a promise.

+0

Хорошо, если я хочу, чтобы он возвращал обратный отсчет. Что мне нужно изменить? Чтобы быть ясным, я имею в виду обратный отсчет, как в 5, 4, 3 ... – London804

Смежные вопросы