我有一个简单的回调函数,它是为我自己的学习使用而创建的,一旦出现第一个警报,它就会显示一个警报。
<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>
我看过其他类似的问题张贴,但是没有人帮助我理解如何使用我创建的示例转换。
我看过这个问题,我如何将现有的回调API转换为承诺?这也不能帮助我理解。
javascript中基本上有两种类型的函数参数,不幸的是它们经常在文献中混淆,因此造成了混淆。
第一种类型是实际的回调,当你告诉引擎为你做一些后台工作,并在它准备好后真正地回叫你。例如众多api,如fs.readFile
,geolocation.getCurrentPosition
等。这些可以(也应该)使用以下模式转换为承诺:
someBackgroundJob(callbackFn)
是
someBackgroundJobPromised => new Promise((resolve, reject) => {
someBackgroundJob(() => {
resolve or reject
})
})
第二种类型是函数参数,您可以在Array.map
或RegExp.replace
等函数中看到。这些不是"回调";严格来说,就是按顺序调用的函数。"承诺"是没有意义的这些。
你的代码是第二种情况,因此这里不需要承诺。