可能的未处理的承诺拒绝(id:0):错误:操作必须是纯对象。使用自定义中间件进行异步操作

时间:2019-08-15 10:28:10

标签: react-native redux redux-thunk

Redux状态managemnet和使用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,
};

1 个答案:

答案 0 :(得分:1)

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