title: How to handle errors in fetch() responses with Redux-Saga?
body: <p>I try to handle <code>Unauthorized</code> error from server using redux-saga. This is my saga:</p>
  
  <pre><code>function* logIn(action) {
    try {
      const user = yield call(Api.logIn, action);
      yield put({type: types.LOG_IN_SUCCEEDED, user});
    } catch (error) {
      yield put({type: types.LOG_IN_FAILED, error});
    }
  }
  </code></pre>
  
  <p>I fetch data like this:</p>
  
  <pre><code>fetchUser(action) {
    const {username, password} = action.user;
    const body = {username, password};
    return fetch(LOGIN_URL, {
      method,
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(body)
    })
      .then(res =&gt; {
        res.json().then(json =&gt; {
          if (res.status &gt;= 200 &amp;&amp; res.status &lt; 300) {
            return json
          } else {
            throw res
          }
        })
      })
      .catch(error =&gt; {throw error});
  }
  </code></pre>
  
  <p>But anyway result is <code>{type: 'LOG_IN_SUCCEEDED', user: undefined}</code> when I expect <code>{type: 'LOG_IN_FAILED', error: 'Unauthorized'}</code>. Where is my mistake? How to handle errors right using Redux-Saga?</p>