Async makes working with Promises easier ```javascript console.clear() // a promise takes to args, resolve and reject // run resolve when asynchronous work is completed successfully // and pass data as desired // run reject when asynchronous work fails and pass error string reason function testPromise(success) { // running testPromise with a bool param will resolve or reject let p = new Promise((resolve, reject) => { setTimeout(() => { if (success) resolve("promise resolved") else reject("promise rejected") }, 2000) }) // then takes function to run as resolve // catch takes function to handle reject message p.then((resolvedResponse) => { console.log("got: " + resolvedResponse) }).catch(error => { console.error("err: " + error) }) } // async makes it easier to setup async promises // putting "async" in front of a function means // it is working with asynchronous promises within it // and allows you to use keyword "await" to resolve them // this function creates a promise to do work or reject function doAPromise() { return new Promise((resolve, reject) => { // reject("failit") setTimeout(() => { resolve("promise dunzo") }, 2000) }) } // this async function uses a classic try catch // the return value of an await promise is the data // passed into the resolve function // the caught exception is the reject reason string async function testAsync() { console.log("testAsync") try { let dunzo = await doAPromise() console.log(dunzo) } catch (e) { console.warn(e) } } console.log("running..") // testPromise(true) testAsync(); ```