1. Need for Promises
When we send a network-request, we have to wait for some time to get response from the server.
But as JavaScript is a synchronous-language, it does not wait to receive a response after some time with normal function call.
Hence, Promises are introduced. Promises gives a promise to code written after it, to provide value after some time.
2. Promise Creation
Promise() constructor is used for Promise creation.
Syntax
new Promise(Executor-Function)      // returns "promiseObj"
Executor-Function
should take 'two functions' as parameters -
- 
resolve()- called when the asynchronous task completes and returns the 'result'
- 
reject()- called when task is failed, and returns 'reason of failure' which is typically a 'error object'
const promise1 = new Promise((resolve, reject) => {
    // do something asynchronous
    //
    // resolve(someValue)
    // or
    // reject('reson for error')
})
Example
const promise1 = new Promise((resolve, reject) => {
    setTimeout(() => {
        resolve('foo')
    }, 300)
})
promise1.then((value) => {
    console.log(value);         // foo
})
console.log(promise1)           // [object Promise]
3. Promise Consumption
const promise1 = new Promise()
const res = promise1.then(res => res.json()).catch(err => console.log(err));
// .then()   step after result is received
// .catch()  way to process error, if error happened
// Chaining
const res = promise1
.then(value1 => modify1(value1))
.then(value2 => modify2(value2))
.then(value3 => modify3(value3))
.catch(err => console.log(err))
4. Making functions returns a Promise
To provide a function with promise-functionality, have it return a promise-object
function myAsyncFunction(url) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest() 
    xhr.open("GET", url) 
    xhr.onload = () => resolve(xhr.responseText) 
    xhr.onerror = () => reject(xhr.statusText) 
    xhr.send() 
  });
}
5. Async Functions
Async Functions are instances of the AsyncFunction constructor, and await keyword is permitted within them.
The async and await keywords enable asynchronous, promise-based behavior to be written in a cleaner style, avoiding the need to explicitly configure promise chains.
try{ } catch(e){ } block is used to process fulfilled (try{}) and failed (catch(e){}) requests
// 1. function returning promise
function resolveAfter2Seconds() {
  return new Promise(resolve => {
    setTimeout(() => {
      resolve('resolved');
    }, 2000);
  });
}
// 2. Async function
async function asyncCall() {
  console.log('calling');
  try {
      const result = await resolveAfter2Seconds();
      console.log(result);      // fulfilled
  } catch(err) {
      console.log(err)          // rejected, or any other err
  }
}
asyncCall();      // expected output: "resolved"
 

 
    
Top comments (0)