0

I have a simple callback function, created for my own learning use, which displays an alert once the first alert is displayed.

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

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

Now I wish to do the same but using a promise. This is what I've done so far before I got stuck.

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

I have looked at other similar questions posted, however none have helped me in understanding how to convert using the example I have created.

I have looked at this question How do I convert an existing callback API to promises? and it does not help me understand.

Mark Rotteveel
  • 100,966
  • 191
  • 140
  • 197
Adam Gong
  • 87
  • 7
  • 1
    You should mention what _specifically_ you don’t understand about the linked post. – Sebastian Simon Sep 13 '21 at 07:32
  • 1
    1. move alert in the promise constructor. 2. call `resolve` after calling `alert` inside the promise constructor. 3. Call `sayMessage` as: `sayMessage().then(() => alert("You are about to enter Jims Gym supplies! Enjoy!"))`. – Yousaf Sep 13 '21 at 07:35
  • [Here's a little example I created](https://jsfiddle.net/51t04u8b/) before the question was closed. Hopefully it will give you a little more insight. – Andy Sep 13 '21 at 07:40
  • Why does `sayMessage` even take a callback? There's nothing asynchronous in there. – Bergi Sep 20 '21 at 11:51

1 Answers1

1

There are basically two types of functional arguments in javascript, which unfortunately often mixed up in the literature, hence the confusion.

The first type are actual callbacks, when you tell the engine to do some background job for you and literally call you back once it's ready. Examples are numerous APIs like fs.readFile, geolocation.getCurrentPosition etc etc. These can (and should) be converted to promises using the following pattern:

    someBackgroundJob(callbackFn)

becomes

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

The second type are function arguments that you see in functions like Array.map or RegExp.replace. These are not "callbacks" in the strict sense, just functions that are called in-order. It doesn't make sense to "promisify" these.

Your code is the second case, therefore no promises are needed here.

georg
  • 211,518
  • 52
  • 313
  • 390