为什么我的承诺立即执行

Sim*_*onD 0 javascript promise

我想更深入地了解promises如何在JavaScript中工作并尝试下一个代码:

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

var promise = delay(10000);
promise.then(alert('after delay'));
Run Code Online (Sandbox Code Playgroud)

我想为JS setTimeout()函数编写一个包装器,我假设警报在执行此代码后10秒后出现,但它立即显示,有人可以解释这里有什么问题吗?

Que*_*tin 6

promise.then(alert('after delay'));
Run Code Online (Sandbox Code Playgroud)

在这里你:

  1. 呼叫 alert()
  2. 将其返回值传递给 then()

所以承诺不会立即解决.你alert才解决它.

你必须通过一个函数then.

promise.then(alert.bind(window, 'after delay'));
Run Code Online (Sandbox Code Playgroud)


小智 5

添加function到您的then声明中:

promise.then(function(){
    alert('after delay')
});
Run Code Online (Sandbox Code Playgroud)