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

我想更彻底地了解 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'));
      

      【讨论】:

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