Introduction
In web development, asynchronous (aka, async) operation, such as API calling is inevitable for developer to not work with, and the basic foundation knowledge we need to know is Promise.
Promise is a special JavaScript object that produces a value after async operation completes successfully, or even an error, such as timeout, connection error, wrong API URL, and so on.
This article is a simple explanation of Promise.
Creating a Promise Object
Below is the example how to create a Promise Object.
let promise = new Promise(function(resolve, reject){
	// perform asynchronous computation
	resolve("Give result")
})
// or using arrow function
let promiseTwo = new Promise((resolve, reject) => {
	resolve("Give result")
})
// or using Promise shortcut function
let promiseThree = new Promise.resolve("Give result")
Promise Handler
In order to get the asynchronous computation result, Promise needs to use .then and return the result. Let's use above example and below code describes how to use .then method.
let promise = new Promise(function (resolve, reject) {
	// return message after 1 sec
	setTimeout(function () {
		resolve("Give result after 1 sec");
	}, 1000); 
});
promise.then((res) => {
  console.log(res); // output: "Give result after 1 sec"
});
Maybe you already guessed that if the Promise object has resolve property, by looking at the above parameter, we should also have reject property. You are definitely right !
Moreover, those arguments (resolve and reject) are callbacks provided by JavaScript.
- resolve(value) - return the 
valueobject if async computation run successfully. - reject(error) return the 
errorobject if an error has occurred. 
Let's expand the above example with reject callback.
let promise = new Promise(function(resolve, reject){
  reject("Error happened")
})
promise.then(res => {
   console.log(res);
}).catch(err => {
   // reject will be caught by .catch
   console.log(err); // output: "Error happened"
})
Deep Dive into Promise Constructor
These below are all Promise object returns from new Promise constructor:
- 
state— initial value is "pending",- then changes to "fulfilled" when 
resolveis called, - or changes to "rejected" when 
rejectis called.
 
 - then changes to "fulfilled" when 
 - 
result— initial value isundefined,- then changes to 
valuewhenresolve(value)is called, - or changes to 
errorwhenreject(error)is called. 
 - then changes to 
 
Important Notes: Promise should execute only one, either
resolveorreject. Once one state is changed, we can't change to other state. Any further execution toresolveorrejectwill be ignored.
let promise = new Promise(function(resolve, reject){
  reject("Error happened!")
  
  resolve("Change my mind, error didn't happen") // will be ignored
})
promise.then(res => {
    console.log('resolve: ', res);
}).catch(err => {
    console.log('rejected:', err); // output: "rejected: Error happened!"
})
Conclusion
Promise in JavaScript performs asynchronous computation and it requires resolve or reject property to return statement or value. In order to get the value from our Promise, we can use then and catch method for resolved and rejected value respectively.
    
                                
Comments (0)