Skip to content
This repository has been archived by the owner on Jul 22, 2021. It is now read-only.

Latest commit

 

History

History
92 lines (76 loc) · 2.16 KB

08-promises.md

File metadata and controls

92 lines (76 loc) · 2.16 KB

Promise

Background

Promise object represents the eventual completion (or failure) of an asynchronous operation, and its resulting value. More reading: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

example-link

const fetch = require("node-fetch")

// Example 1 - Shows why Promises are needed
const printColor = (color) => {
  console.log(color)
}

const slowFunction = () => {
  setTimeout(() => {
    return "Blue"
  }, 3000)
}

const color = slowFunction()
printColor(color) // undefined

// Example 2 - Shows simple Promise
const printAColor = (color) => {
  console.log(color)
}

const myFirstPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("Success!")
  }, 3000)
})

myFirstPromise
  .then((successMessage) => {
    console.log(`Yay! ${successMessage}`)
    return "Purple"
  })
  .then(printAColor)
// Yay! Success!
// Purple

// Example 3 - Shows Promise branching
const mySecondPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("Success!")
  }, 3000)
})

mySecondPromise
  .then((successMessage) => {
    console.log(`Yay! ${successMessage}`)
  })

mySecondPromise
  .then((successMessage) => console.log(successMessage.toUpperCase()))
// Yay! Success!
// SUCCESS

// Example 4 - Web service real example
const makeStarWarsApiCall = () => {
  return new Promise((resolve, reject) => {
    const url = "http://swapi.co/api/films/"
    fetch(url)
      .then((response) => response.json())
      .then((json) => {
        const firstFilmTitle = json.results[0].title
        resolve(firstFilmTitle)
      })
      .catch((error) => reject(error))
  })
}

const printInAllCaps = (whatToPrint) => {
  console.log(whatToPrint.toUpperCase())
}

const apiPromise = makeStarWarsApiCall()

apiPromise
  .then((resolutionMessage) => {
    console.log(resolutionMessage)
    return "I can continue to pass things to the next .then()"
  })
  .then((lastReturnedThing) => printInAllCaps(lastReturnedThing))
  .catch((rejectMessage) => console.log(rejectMessage))
// A New Hope
// I CAN CONTINUE TO PASS THINGS TO THE NEXT .THEN()