Почему мое обещание выполняется немедленно

Я хочу более подробно изучить, как промисы работают в JavaScript, и попробовать следующий код:

function delay(timeout) {
    return new Promise(function(resolve, reject){
        setTimeout(resolve,timeout);
    });
}

var promise = delay(10000);
promise.then(alert('after delay'));

Я хотел написать оболочку для функции JS setTimeout(), и я предполагаю, что предупреждение появляется через 10 секунд при выполнении этого кода, но оно отображается сразу, может ли кто-нибудь объяснить, что здесь не так?


person SimonD    schedule 20.03.2017    source источник
comment
Немедленно выполняется ваше alert, а не обещание.   -  person georg    schedule 20.03.2017


Ответы (3)


promise.then(alert('after delay'));

Вот ты:

  1. Звоните alert()
  2. Передайте возвращаемое значение в then()

Таким образом, обещание не решается немедленно. Вы просто alert до того, как он разрешится.

Вы должны передать функцию в then.

promise.then(alert.bind(window, 'after delay'));
person Quentin    schedule 20.03.2017

Добавьте function к своему заявлению then:

promise.then(function(){
    alert('after delay')
});
person Matej Marconak    schedule 20.03.2017

Причина объясняется ответом Квентина. Дополнительным решением будет использование стрелочных функций:

promise.then(() => alert('after delay'));
person t.niese    schedule 05.01.2019