To get the most out of this article, please make sure that you know basics about Synchronous and Asynchronous Programming and, if possible, about javascript callbacks.However, I will try to keep most of the stuff away from these topics so that you can understand at least 85% of it.

Understanding Promises

Suppose a friend comes to you for financial help and you promise him to give some cash after taking it out from an ATM.
//You have made promise to your friend and you leave for bank
if (everythingGoesWell) {
return theMoney //Promise is fulfilled
}
else {
return "Account_Frozen" //Promise failed
}
Promises are used in JavaScript to handle
async
operations. They are special objects that link the actual output (in the above example, it's required money) and the reason due to which we may not get the output (Account Frozen).

States of a Promise


A JavaScript
 promise
is either
settled
or
pending
. We can use the
Promise 
constructor to create a
promise
.
var thePromise = new Promise(executor())
The executor function is a callback of the promise constructor. It takes two callbacks: 
resolve
 and 
reject
, as arguments.
  1. The 
    resolve
     callback is used when the
    promise
    is actually fulfilled. It takes the output value as its argument.
  2. The 
    reject
     callback is used when the
    promise
    couldn't be fulfilled. It takes the reason as its argument.
When we create a
promise
it initializes in its 
pending
 state. Once the executor runs, the state changes to 
settled
 which can be either
resolved
 or 
rejected
.