### Fetch

    fetch('/data.json')
      .then(response => response.json())
      .then(data => {
        console.log(data)
      })
      .catch(err => ...)

### Response

    fetch('/data.json')
    .then(res => {
      res.text()       // response body (=> Promise)
      res.json()       // parse via JSON (=> Promise)
      res.status       //=> 200
      res.statusText   //=> 'OK'
      res.redirected   //=> false
      res.ok           //=> true
      res.url          //=> 'http://site.com/data.json'
      res.type         //=> 'basic'
                       //   ('cors' 'default' 'error'
                       //    'opaque' 'opaqueredirect')

      res.headers.get('Content-Type')
    })

### Request options

    fetch('/data.json', {
      method: 'post',
      body: new FormData(form), // post body
      body: JSON.stringify(...),

      headers: {
        'Accept': 'application/json'
      },

      credentials: 'same-origin', // send cookies
      credentials: 'include',     // send cookies, even in CORS

    })

### Catching errors

    fetch('/data.json')
      .then(checkStatus)

    function checkStatus (res) {
      if (res.status >= 200 && res.status < 300) {
        return res
      } else {
        let err = new Error(res.statusText)
        err.response = res
        throw err
      }
    }

Non-2xx responses are still successful requests. Use another function to turn them to errors.

### Using with node.js

    const fetch = require('isomorphic-fetch')

See: isomorphic-fetch (npmjs.com)

## References

- https://fetch.spec.whatwg.org/
- https://www.npmjs.com/package/whatwg-fetch

0 Comments for this cheatsheet. Write yours!