Possible Unhandled Promise Rejection (id: 0): Error: Actions must be plain objects. Use custom middleware for async actions

Possible Unhandled Promise Rejection (id: 0): Error: Actions must be plain objects. Use custom middleware for async actions

Redux 状态管理网和使用 redux-thunk 从 api 获取数据都按预期工作。当我在数据获取成功时从操作导航到其他屏幕时,导航完成并出现以下警告:

Possible Unhandled Promise Rejection (id: 0):
     │ Error: Actions must be plain objects. Use custom middleware for async actions.

我没有得到任何帮助我的解决方案。

获取数据的方法:

export function insertFirebaseToken() {
    return function action(dispatch) {

      const request = axios({
        method: 'POST',
        url: 'https://beta......',
        headers: (
        {
          'Accept': 'application/json',
          'Content-Type': 'application/json',
          'Authorization': 'Bearer ....',
        }),
        data: JSON.stringify(
        {
          firebase_token: '....',
        })
      });

      return request.then(
        response => {
          if(response.data.success){
            dispatch(saveLoginDataSuccessFailureError());
            dispatch(NavigationService.navigate('MyCompanies'));
          }
          else{
            if (Platform.OS === 'android') {
              ToastAndroid.showWithGravityAndOffset( 'Error: '+response.data.message, ToastAndroid.LONG, ToastAndroid.BOTTOM, 0, 50);
            }
            else{
              alert('Error in inserting firebase Token.');
            }
            dispatch(saveLoginDataSuccessFailureError());
          }
        },
        error =>  {
          dispatch(saveLoginDataSuccessFailureError());
          ToastAndroid.showWithGravityAndOffset( 'Error: '+error, ToastAndroid.LONG, ToastAndroid.BOTTOM, 0, 50);
        }
      );
    }
}

companyClickedSuccessFailureError 方法:

export const companyClickedSuccessFailureError = () => {
  return{
    type: COMPANY_CLICKED_SUCCESS_FAILURE_ERROR,
  };
}

activeReducers:

import {
GET_COMPANIES_SUCCESS,
COMPANY_CLICKED_REQUEST,
COMPANY_CLICKED_SUCCESS_FAILURE_ERROR,
} from '../actions/types';

const initialState ={
  loading: false,
  arrayRecentCompanies: []
};

export default (state = initialState, action) => {
  switch(action.type){
    case COMPANY_CLICKED_REQUEST:
      return {...state, loading: true};
    case COMPANY_CLICKED_SUCCESS_FAILURE_ERROR:
      return {...state, loading: false};
    case GET_COMPANIES_SUCCESS:
      return {...state, loading: false, arrayRecentCompanies: action.payload};
    default:
      return state;
  }
}

NavigationService.js :

import { NavigationActions } from 'react-navigation';

let navigator;

function setTopLevelNavigator(navigatorRef) {
navigator = navigatorRef;
}

function navigate(routeName, params) {
navigator.dispatch(
  NavigationActions.navigate({
    routeName,
    params,
  })
);
}

// add other navigation functions that you need and export them

export default {
navigate,
setTopLevelNavigator,
};

NavigationService.navigate 返回的结果不是 redux 动作(显然你只能调度 redux 动作)。我认为你可以直接调用它而不是在 redux dispatch 调用中包装。