为什么我的承诺立即执行

时间:2017-03-20 12:10:52

标签: 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'));

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

3 个答案:

答案 0 :(得分:6)

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

在这里:

  1. 致电alert()
  2. 将其返回值传递给then()
  3. 所以承诺并没有立即解决。在结算之前你只需alert

    您必须将功能传递给then

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

答案 1 :(得分:3)

function添加到您的then声明中:

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

答案 2 :(得分:0)

原因由Quentin's answer解释。另一个解决方案是使用箭头功能:

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