Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does the `then()` handler of a promise execute immediately?

I want to learn more thoroughly how promises work in JavaScript and I tried the following code:

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

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

I wanted to write a wrapper for the JavaScript setTimeout() function and I assume alert should execute after 10 seconds. However, this code shows it immediately.

Could someone explain what is wrong here?

like image 491
SimonD Avatar asked Sep 18 '25 04:09

SimonD


2 Answers

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

Here you:

  1. Call alert()
  2. Pass its return value to then()

So the promise doesn't resolve immediately. You just alert before it resolves.

You have to pass a function to then.

promise.then(alert.bind(window, 'after delay'));
like image 150
Quentin Avatar answered Sep 20 '25 17:09

Quentin


Add function to your then statement:

promise.then(function(){
    alert('after delay')
});
like image 44
Matej Marconak Avatar answered Sep 20 '25 17:09

Matej Marconak