title: Redux saga multiple api calls
body: <p>I have a bunch of action watchers of my api calls using redux-saga. The thing is I would like to make <strong>ONE</strong> action watcher which fire all these action watchers to fetch all the api without having to repeat the codes I already have. If one of the watcher return a rejected Promise, it should cancel all the other watchers. What's the best way of doing this?</p>
  
  <pre><code>function* watchFetchUsers() {
      while(true) {
          yield take([FETCH_USERS]);
          try {
              const users = yield call(api.fetchUserData);
              yield put({ type:FETCH_USERS, payload: users });    
          } catch (err) {
              yield put({ type:SIGNOUT, status: err });
              return err;
          }
      }
  }
  
  function* watchFetchDepartments() {
      while(true) {
          yield take([FETCH_DEPARTMENTS]);
          try {
              const departments = yield call(api.fetchDepartmentData);
              yield put({ type:FETCH_DEPARTMENTS, payload: departments });    
          } catch (err) {
              yield put({ type:SIGNOUT, status: err });
              return err;
          }
      }
  }
  
  function* watchFetchPositions() {
      while(true) {
          yield take([FETCH_POSITIONS]);
          try {
              const positions = yield call(api.fetchPositionData);
              yield put({ type:FETCH_POSITIONS, payload: positions });    
          } catch (err) {
              yield put({ type:SIGNOUT, status: err });
              return err;
          }
      }
  }
  
  function* watchFetchBanks() {
      while(true) {
          yield take([FETCH_BANKS]);
          try {
              const banks = yield call(api.fetchBankData);
              yield put({ type:FETCH_BANKS, payload: banks });    
          } catch (err) {
              yield put({ type:SIGNOUT, status: err });
              return err;
          }
      }
  }
  
  function* watchFetchAuthenticatedUser() {
      while(true) {
          yield take([FETCH_AUTHENTICATED_USER]);
          try {
              const user = yield call(api.fetchAuthenticatedUser);
              yield put({ type:FETCH_AUTHENTICATED_USER, payload: user });    
          } catch (err) {
              yield put({ type:SIGNOUT, status: err });
              return err;
          }
      }
  }
  
  export default function* fetchData() {
      yield [
          fork(watchFetchUsers),
          fork(watchFetchDepartments),
          fork(watchFetchPositions),
          fork(watchFetchBanks),
          fork(watchFetchAuthenticatedUser)
      ];
  }
  </code></pre>