• Easy to write • Uses multi-threading • Memory and context-switching overhead • non-blocking/event-loop (“asynchronous”) • Single-threaded • High-concurrency with low-memory consumption • Great for UI and IO-bound services rather than CPU- bound
things in parallel is harder! • Give up constructs such as for/while and try/catch • Error handling is difficult • Code readability suffers and systems become hard to maintain
promise. • When we await a promise, our function pauses until the promise is ready (resolved) • We can still use all our favorite promise helpers such as Promise.all()
about doing too much sequentially when you can actually do it in parallel • Using await in map/filter won't do what you might expect! • Even though it looks synchronous, remember your code has been paused/resumed