【问题标题】:How to convert a callback function to a promise? [duplicate]如何将回调函数转换为 Promise? [复制]
【发布时间】:2021-09-13 07:25:52
【问题描述】:

我有一个简单的回调函数,它是为我自己的学习用途而创建的,它会在显示第一个警报时显示一个警报。

  <script>
    const sayMessage = (callbackFn) => {
    alert("Hello there customer!");
    callbackFn();
}

    sayMessage(() => {
      alert("You are about to enter Jims Gym supplies! Enjoy!");
})
    </script>

现在我希望做同样的事情,但使用一个承诺。这是我在卡住之前所做的事情。

<script>
  const promiseMessage = callbackFn =>{
    return new Promise((resolve, reject) =>{
      
    } )
  }
</script>

我查看了发布的其他类似问题,但没有一个帮助我理解如何使用我创建的示例进行转换。

我看过这个问题How do I convert an existing callback API to promises? 并没有帮助我理解。

【问题讨论】:

  • 您应该提及具体您对链接帖子的不理解。
  • 1.在 promise 构造函数中移动警报。 2. 在promise构造函数中调用alert后调用resolve。 3. 致电sayMessage 为:sayMessage().then(() =&gt; alert("You are about to enter Jims Gym supplies! Enjoy!"))
  • Here's a little example I created 在问题结束之前。希望它能给你更多的见解。
  • 为什么sayMessage 还要回调?那里没有任何异步内容。

标签: javascript promise callback


【解决方案1】:

javascript 中基本上有两种类型的函数参数,不幸的是,它们在文献中经常混淆,因此造成混淆。

第一种类型是实际的回调,当您告诉引擎为您执行一些后台工作并在准备好后直接回叫您。例如fs.readFilegeolocation.getCurrentPosition 等众多 API。这些可以(并且应该)使用以下模式转换为 Promise:

    someBackgroundJob(callbackFn)

变成

    someBackgroundJobPromised => new Promise((resolve, reject) => {
        someBackgroundJob(() => {
            resolve or reject
        })
    })

第二种类型是您在 Array.mapRegExp.replace 等函数中看到的函数参数。这些不是严格意义上的“回调”,只是按顺序调用的函数。 “承诺”这些是没有意义的。

您的代码是第二种情况,因此这里不需要任何承诺。

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 2015-12-11
    • 2018-04-23
    • 2018-09-19
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2016-12-20
    相关资源
    最近更新 更多