2017-03-20 22 views
0

我想了解更彻底承诺在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秒钟,但它立即显示,有人可以解释这里有什么问题吗?

+0

这是您的'警报'立即执行,而不是承诺。 – georg

+0

@georg你好,我已经知道了)谢谢。 – SimonD

回答

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

在这里,您:

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

所以承诺不会立即解决。解决之前您只需要alert

您必须通过函数then

promise.then(alert.bind(window, 'after delay')); 
2

添加functionthen声明:

promise.then(function(){ 
    alert('after delay') 
});