- a promise is a way of controlling the flow of logic for asynchronous operations
- this is necessary because most JS, especially IO like communicating with a server, is asyncronous
- here's a petty good explanation of Promises: https://developers.google.com/web/fundamentals/getting-started/primers/promises
- here's a developer reference for Promises: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise
- see which browsers support fetch: http://caniuse.com/#feat=fetch
- you can 'polyfill' fetch for browsers that don't support it using https://github.com/github/fetch
- polyfilling is where you add a feature to JS that isn't supported natively in the browser, by loading a library that adds the same functionality as if it were natively supported
- or use a service that auto-polyfills the fetch function in any browser that's missing it: https://polyfill.io/v2/docs/