code: function getAsyncActionTypes(feature, action) {
    const f = upperSnakeCase(feature);
    const a = upperSnakeCase(action);
    const pre = prefix.getPrefix() ? upperSnakeCase(prefix.getPrefix()) + '$' : '';
    return {
      normal: getActionType(feature, action),
      begin: `${pre}${f}_${a}_BEGIN`,
      success: `${pre}${f}_${a}_SUCCESS`,
      failure: `${pre}${f}_${a}_FAILURE`,
      dismissError: `${pre}${f}_${a}_DISMISS_ERROR`,
    };
  }
docs: Get action type constants for an async action. It uses UPPER_SNAKE_CASE and combines feature name and action name.
  @param {string} feature - The feature name of the action.
  @param {string} action - The action name.
  
  @example
  const utils = require('rekit-core').utils;
  utils.getAsyncActionTypes('home', 'doAsync');
  // =>
  // {
  //   doAsyncBegin: 'HOME_DO_ASYNC_BEGIN',
  //   doAsyncSuccess: 'HOME_DO_ASYNC_SUCCESS',
  //   doAsyncFailure: 'HOME_DO_ASYNC_FAILURE',
  //   doAsyncDismissError: 'HOME_DO_ASYNC_DISMISS_ERROR',
  // }