A Promise in JavaScript is an object representing the eventual completion or failure of an asynchronous operation and the arrival of its resulting value in future.
A Promise is a proxy for a value not necessarily known when the promise is created.
It allows you to associate handlers with an asynchronous action's eventual success value or failure reason. This lets asynchronous methods return values like synchronous methods instead of immediately returning the final value, the asynchronous method returns a promise to supply the value at some point in the future.
It Saves us from callback hell.