mrinal1224 98aa698dd9 push
2024-05-07 12:57:28 +05:30

12 KiB

Asynchronous Programming 3

Definition

Async Function: An async function is declared with the async keyword. It allows you to write asynchronous code in a more synchronous-like manner. Inside an async function, you can use the await keyword to pause execution until a Promise is resolved.

Await: The await keyword is used inside an async function to wait for a Promise to resolve. It effectively pauses the execution of the function until the Promise resolves and returns its result.

Promises: Async/await is often used with Promises. Promises are objects that represent the eventual completion or failure of an asynchronous operation. They are a way to manage asynchronous code and are frequently returned by functions like fetch.

Question

Create resolve and reject states of Promise to place a order, then process the order and then generate a bill process.

Solution

Step - 1: Create a Promise method for placing/accepting the order.

1.1 Create resolve state if order is placed

function placeOrder(drink) {
    return new Promise(function(resolve, reject) {
        if(drink === 'coffee') {
            resolve('Order for Coffee Placed.')
        }
        else {
            reject('Order can not be Placed.')
        }
    })
}

placeOrder('coffee').then(function(orderStatus) {
    console.log(orderStatus)
})

Output:

1.2 Create reject state if order is not placed

function placeOrder(drink) {
    return new Promise(function(resolve, reject) {
        if(drink === 'coffee') {
            resolve('Order for Coffee Placed.')
        }
        else {
            reject('Order can not be Placed.')
        }
    })
}

placeOrder('tea').then(function(orderStatus) {
    console.log(orderStatus)
}).catch(function(error) {
    console.log(error)
})

Output:

Step - 2: Create a Promise method for process the order.

function placeOrder(drink) {
    return new Promise(function(resolve, reject) {
        if(drink === 'coffee') {
            resolve('Order for Coffee Placed.')
        }
        else {
            reject('Order can not be Placed.')
        }
    })
}

function processOrder(orderPlaced) {
    return new Promise(function(resolve) {
        resolve(`${orderPlaced} and Served.`)
    })
}

placeOrder('coffee').then(function(orderStatus) {
    console.log(orderStatus)
    return orderStatus
}).then(function(orderStatus) {
    let orderIsProcessed = processOrder(orderStatus)
    console.log(orderIsProcessed)
    return orderIsProcessed
}).then(function(orderIsProcessed) {
    console.log(orderIsProcessed)
})

Output:

Step - 3: Create a Promise method for generate the bill.

function placeOrder(drink) {
    return new Promise(function(resolve, reject) {
        if(drink === 'coffee') {
            resolve('Order for Coffee Placed.')
        }
        else {
            reject('Order can not be Placed.')
        }
    })
}

function processOrder(orderPlaced) {
    return new Promise(function(resolve) {
        resolve(`${orderPlaced} and Served.`)
    })
}

function generateBill(processedOrder) {
    return new Promise(function(resolve) {
        resolve(`${processedOrder} and Bill Generated with 200 Rs.`)
    })
}

placeOrder('coffee').then(function(orderStatus) {
    console.log(orderStatus)
    return orderStatus
}).then(function(orderStatus) {
    let orderIsProcessed = processOrder(orderStatus)
    console.log(orderIsProcessed)
    return orderIsProcessed
}).then(function(orderIsProcessed) {
    console.log(orderIsProcessed)
    return orderIsProcessed
}).then(function(orderIsProcessed) {
    let BillGenerated = generateBill(orderIsProcessed)
    return BillGenerated
}).then(function(BillGenerated) {
    console.log(BillGenerated)
}).catch(function(err) {    
    console.log(err)
})
    

Output:

Explanation: Firstly, we have create placeOrder function to place the order then if we pass 'coffee' then the promise is in resolve state. As soon as it is resolved we get the orderStatus and printing it. After that as soon as order is placed then we need to process the order this will be also in resolved state. After processing the order we need to generate the bill this should be also in resolved state, this process called the promise chaining method.

Optimized Solution: Using Async & Await

Step - 1: We will use async and await method to make code more clean and readable. to use async and await we need to create a function.

function placeOrder(drink){
    return new Promise(function(resolve , reject){
        if(drink ==='coffee'){
            resolve('Order for Coffee Placed')
        }
        else{
            reject('Order cannot be Placed')
        }
    })
  }
  
  
  function processOrder(orderPlaced){
      return new Promise(function(resolve){
          resolve(`${orderPlaced} and Served`)
      })
  }
  
  function genreateBill(processedOrder){
      return new Promise(function(resolve){
          resolve(`${processedOrder} and Bill generated with 200Rs`)
      })
  }

// Async and Await 
// to use async await you need to create Functions

async function serveOrder(){
        let orderstatus = await placeOrder('coffee')
        console.log(orderstatus)
        let processedOrder = await processOrder(orderstatus)
        console.log(processedOrder)
        let generatedBill = await genreateBill(processedOrder)
        console.log(generatedBill)
}

serveOrder()

Output:

Step - 2: To Handle error we will use try and cacth method

function placeOrder(drink){
    return new Promise(function(resolve , reject){
        if(drink ==='coffee'){
            resolve('Order for Coffee Placed')
        }
        else{
            reject('Order cannot be Placed')
        }
    })
  }
  
  
  function processOrder(orderPlaced){
      return new Promise(function(resolve){
          resolve(`${orderPlaced} and Served`)
      })
  }
  
  function genreateBill(processedOrder){
      return new Promise(function(resolve){
          resolve(`${processedOrder} and Bill generated with 200Rs`)
      })
  }

// Async and Await 
// to use async await you need to create Functions

async function serveOrder(){
    try {
        let orderstatus = await placeOrder('tea')
        console.log(orderstatus)
        let processedOrder = await processOrder(orderstatus)
        console.log(processedOrder)
        let generatedBill = await genreateBill(processedOrder)
        console.log(generatedBill)
    } catch (error) {
        console.log(error)
    }
}

serveOrder()

Output:

Question

Create the Promise.all function in JavaScript that returns a single promise and the resolved value contains an array of values.

Solution

const p1 = Promise.resolve("pi");  // pi
//returns a promise of resolved value "pi"
const p2 = 3.14;  // 3.14
const p3 = new Promise((resolve, reject) => { 
    //promise method to resolve or reject values
    resolve("Maths"); 
    //p3 contains a promise of resolving "maths" value 
});

let returned_promise = Promise.all([p1 ,p2 ,p3]); 
//checking fulfillment or rejection of any of the promises: p1,p2 and p3 passed as iterable in the function 

returned_promise.then((array)=>{ 
    //returned_promise will contain final returned value of Promise.all() method
    console.log(array); 
    //checking and printing the value returned as promised by Promise.all() method in JS
})

Output:

Explanation: As we can see, the Promise.all in JavaScript has returned a single promise and the resolved value contains an array of values.

Example

let a = 12

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

These are the Falsy Values

  • undefined
  • null
  • 0
  • ''
  • NaN
  • false

Example 1

let a = undefined

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

Example 2

let a = null

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

Example 3

let a = 0

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

Example 4

let a = ''

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

Example 5

let a = NaN

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

Example 6

let a = false

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:

Everything other than this will be truthy value

Example 7

let a = 'Scaler'

if(a){
    console.log('This is a truthy Value')
}else{
    console.log('This is a Falsy Value')
}

Output:


title: Diffrence Between == and === description: duration: 900 card_type: cue_card

Question

What is the Diffrence Between == and ===

Example 1

let a = 2
let b = '2'

console.log(a==b) // loose checking //
// here in this case only the values are getting checked

Output:

Example 2

let a = 2
let b = '2'

console.log(a===b) // strict Checking
// Here in this case the value as well as the type is getting checked

Output:

Question

How to check typeof Operator

Example 1

let c = 'Scaler'

console.log(typeof c)

Output:

Example 2

let c = {name : 'Scaler'} 

console.log(typeof c)

Output:

Example

let c = [1, 2, 3]

// Array.isArray - Boolean Method

let checkArray = Array.isArray(c)

console.log(checkArray)

Output:

Example

let d = 1/0

console.log(d)

Output:

Example

let d = 2 + ''

console.log(d)

Output:

Example 1

let sqroot = Math.sqrt(-3)
console.log(sqroot)

Output:

Example 2

let out = 'Scaler'*10
console.log(out)

Output:

Example 1

let out = 'Scaler'*10

let checkIsNan = isNaN(out)

console.log(checkIsNan)

Output:

Example 2

let a = 2

let checkIsNan = isNaN(a)

console.log(checkIsNan)

Output:

Example 1

let sqroot = Math.sqrt(-3)

console.log(typeof sqroot)

Output:

console.log(isNaN(null))

console.log(isNaN(undefined))

Output: