DEV Community

Bukunmi Odugbesan
Bukunmi Odugbesan

Posted on

Coding Challenge Practice - Question 116

The task is to implement Promise.prototype.finally()

The boilerplate code

function myFinally(promise, onFinally) {
  // your code here
}
Enter fullscreen mode Exit fullscreen mode

Promise.prototype.finally() could be used to return a callback when a promise is settled (fulfilled or rejected).

Attach .then to resolve the promise

return promise.then(
Enter fullscreen mode Exit fullscreen mode

If the promise was fulfilled

(value) => {
return Promise.resolve(onFinally && onFinally()).then(() => value)
}
Enter fullscreen mode Exit fullscreen mode

Promise.resolve is used because it converts normal value to a resolved promise.

If the promise is rejected

(error) => {
return Promise.resolve(onFinally && onFinally()).then(() => {
throw error
}
Enter fullscreen mode Exit fullscreen mode

The final code

function myFinally(promise, onFinally) {
  // your code here
  return promise.then(
    (value) => {
      return Promise.resolve(onFinally && onFinally()).then(() => value);
    },
    (error) => {
      return Promise.resolve(onFinally && onFinally()).then(() => {
        throw error
      })
    }
  )
}
Enter fullscreen mode Exit fullscreen mode

That's all folks!

Top comments (0)