无法使用axios读取未定义的属性`.then`并在操作中做出反应

时间:2017-09-18 22:02:39

标签: reactjs promise axios

我在动作中使用axios并试图通过链接动作调用该动作。我将展示我在这里要做的事情:

this.props.fetchOffers().then(() => {
        this.props.filter(this.props.filterOption);
      });

但我收到错误:Cannot read property 'then' of undefined

我没有得到的是,在这个功能的下方,我还有另一个动作就是做同样的事情并且工作正常。

  this.props.sortOffers(value).then(() => {
      this.props.filter(this.props.filterOption);
    });

以下是此版本的工作版本。

以下是操作文件:

import axios from 'axios';
import { reset } from 'redux-form';

import { FETCH_OFFERS, SORT_OFFERS, FETCH_OFFER, GET_FILTER, PAYMENT_TYPE } from './types';

export function paginateOffers(indexPosition, numberOfItems) {
  return (dispatch) => {
    axios
      .get('/API/offers/pagination', {
        params: {
          position: indexPosition,
          number: numberOfItems,
        },
      })
      .then((response) => {
        dispatch({ type: FETCH_OFFERS, payload: response.data });
      })
      .catch((error) => {
        console.error(error);
      });
  };
}

export function fetchOffers() {
  return dispatch => {
    axios
      .get('/API/offers')
      .then((response) => {
        dispatch({ type: FETCH_OFFERS, payload: response.data });
      })
      .catch((err) => {
        console.error(err);
      });
  };
}

export function fetchOffer(id) {
  return (dispatch) => {
    axios
      .get(`/API/offers/${id}`)
      .then((response) => {
        dispatch({ type: FETCH_OFFER, payload: response.data.result });
      })
      .catch((err) => {
        console.error(`ERROR: ${err}`);
      });
  };
}

export function sortOffers(params) {
  const { price, title, category, type } = params;
  return dispatch =>
    axios
      .get('/API/offers/sort', {
        params: { price, title, category, type },
      })
      .then((response) => {
        dispatch({
          type: SORT_OFFERS,
          payload: response.data,
          sortOptions: params,
        });
        dispatch({
          type: PAYMENT_TYPE,
          payment: type,
        });
        dispatch(reset('sorter'));
      })
      .catch((err) => {
        console.error(err);
      });
}

export function getFilterOption(option) {
  return (dispatch) => {
    dispatch({
      type: GET_FILTER,
      option,
    });
  };
}

1 个答案:

答案 0 :(得分:3)

您未在fetchOffers动作创建者中回复承诺。注意你如何宣布你的胖箭功能的细微差别。

试试这个:

export function fetchOffers() {
  return dispatch => 
    axios
      .get('/API/offers')
      .then((response) => {
        dispatch({ type: FETCH_OFFERS, payload: response.data });
      })
      .catch((err) => {
        console.error(err);
      });
}