Как создать последовательность саг - PullRequest
1 голос
/ 16 марта 2020
export function* handleFetchAccountDetails(action) {
  try {
    yield put(
      updateAccountDetails({ data: undefined, error: undefined, loading: true })
    );
    console.log("handleFetchAccountDetails", action);
    const result = yield call(
      api.fetchSpecificAccountDetails,
      action.params.id
    );
    console.log("result", result); // TODO: need to work on it.
    if (result) {
      yield put(
        updateAccountDetails({
          data: result.data.response,
          error: undefined,
          loading: false
        })
      );
      //update feature
      // yield put(
      //   updateProductFeature({
      //     data: features,
      //     loading: false,
      //     error: undefined
      //   })
      // );
    }
  } catch (error) {
    let errMessage =
      (error &&
        error.response &&
        error.response.data &&
        error.response.data.response &&
        error.response.data.response.message) ||
      "Bad Request";
    yield put(
      updateAccountDetails({
        error: errMessage,
        data: undefined,
        loading: false
      })
    );
  }
}




export function* handleFetchProductFeatures(action) {
  try {
    yield put(
      updateProductFeature({ data: undefined, error: undefined, loading: true })
    );
    const result = yield call(api.fetchProductFeature);
    if (result && result.data && result.data.response) {
      console.log("result.data.response", result.data.response);
      let features =
        result.data.response &&
        result.data.response.map(feature => ({
          label: feature,
          value: false
        }));
      yield put(
        updateProductFeature({
          data: features,
          loading: false,
          error: undefined
        })
      );
      yield put(handleFetchAccountDetails(action)); // need to call after getting product features
    }
  } catch (error) {
    let errMessage = "";
    if (typeof error.response === "object") {
      errMessage = errorHandler(error.response);
    } else {
      errMessage = error.toString();
    }
    yield put(
      updateProductFeature({
        error: errMessage,
        loading: false,
        data: undefined
      })
    );
  }
}


export default function* watchAccountsActions() {
yield takeEvery(FETCH_PRODUCT_FEATURE, handleFetchProductFeatures);
}

как делать последовательные вызовы API изнутри саг. после получения функции продукта мне нужно вызвать handleFetchAccountDetails внутри handleFetchProductFeature. как мне это сделать.

...