JSFiddle - React, Tailwind, and code Playground
by dougiei
JavaScript
// helper function for stock check
const doTheyHaveIt = () => false
// boilerplate functions for getting the different ingredients
const getButter = () => new Promise((resolve, reject) => {
setTimeout(doTheyHaveIt() ? resolve('Butter') : reject('Sorry, no butter'), 1000)
})
const getFlour = () => new Promise((resolve, reject) => {
setTimeout(doTheyHaveIt() ? resolve('Flour') : reject('Sorry, no flour'), 1000)
})
const getSugar = () => new Promise((resolve, reject) => {
setTimeout(doTheyHaveIt() ? resolve('Sugar') : reject('Sorry, no sugar'), 1000)
})
const getEggs = () => new Promise((resolve, reject) => {
setTimeout(doTheyHaveIt() ? resolve('Eggs') : reject('Sorry, no eggs'), 1000)
})
const getIngredientsFromTheSuperMarket = async () => {
try {
const butter = await getButter()
const flour = await getFlour()
const sugar = await getSugar()
const eggs = await getEggs()
return [
butter,
flour,
sugar,
eggs,
]
} catch(e) { return e }
}
const getIngredientsOnline = async () => {
try {
return await Promise.all([
getButter(),
getFlour(),
getSugar(),
getEggs(),
])
} catch (e) { return e }
}
// boilerplate async functions that return strings
const mix = async (ingredients) => 'Cake Mix'
const cook = async (cakeMix) => 'Hot Cake'
const stand = async (hotCake) => '🍰'
const bakeACake = async () => {
const ingredients = await getIngredientsOnline()
const cakeMix = await mix(ingredients)
const hotCake = await cook(cakeMix)
const cake = await stand(hotCake)
return cake
}
// create a fresh cake and log it in the callback
const freshCake = bakeACake().then((cake) => console.info(cake))