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



Redux state 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);
}
);
}
}

公司点击成功失败错误方法:

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

主动减速器:

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;
}
}

导航服务.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 操作(。我认为您可以直接调用它,而不是在 reduxdispatch调用中包装。

相关内容

最新更新