Защо обещанието ми се изпълнява незабавно

Искам да науча по-задълбочено как работят обещанията в 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