【问题标题】:Why does the `then()` handler of a promise execute immediately?为什么 promise 的 then() 处理程序会立即执行?
【发布时间】:2022-12-28 10:45:10
【问题描述】:

我想更彻底地了解 promise 在 JavaScript 中的工作原理,我尝试了以下代码:

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

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

我想为 JavaScript setTimeout() 函数编写一个包装器,我假设 alert 应该在 10 秒后执行。但是,此代码会立即显示它。

有人可以解释这里出了什么问题吗?

【问题讨论】:

  • 立即执行的是您的alert,而不是承诺。

标签: javascript promise


【解决方案1】:
promise.then(alert('after delay'));

给你:

  1. 拨打alert()
  2. 将其返回值传递给then()

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

    你必须通过一个功能then

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

【讨论】:

    【解决方案2】:

    function 添加到您的 then 声明中:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        • 1970-01-01
        相关资源
        最近更新 更多