动作必须是普通对象。使用客户中间件在React Native中执行异步操作

时间:2018-08-05 13:54:28

标签: react-native asyncstorage

我正在尝试在我的本机应用程序中使用AsyncStorage。在还原会话功能中,我使用AsyncStorage.multiGet获取用户名和位置。但是我收到“错误:操作必须是普通对象。将自定义中间件用于异步分配”错误。

我的index.js看起来像这样:

const loggerMiddleware = createLogger();
const store = createStore(reducers, applyMiddleware(thunkMiddleware, loggerMiddleware));

const nsidenotify = () => (
  <Provider store={store}>
    <App />
  </Provider>
);

我的操作如下:

export function sessionRestoring(){
  return {
    type: types.SESSION_RESTORING,
  };
};

export function signinRequest() {
  return {
    type: types.SIGNIN_REQUEST,
  };
}

export async function restoreSession() {
  console.log('Restoring Session');
  let userName = '';
  let userLocation = '';
  await  AsyncStorage.multiGet(['userName', 'userLocation'])
  .then(response => {
    userName = response['userName'];
    userLocation = response['userLocation'];
    console.log(`Found ${userName} from ${userLocation}`);
  })
  if (typeof userName == 'string'){
    return (dispatch) => {
      console.log('Dispatch Session Restoring');
      dispatch(sessionRestoring());
        return FIREBASE_AUTH.onAuthStateChanged(user => {
          if (user) {
            user.name = userName;
            user.location = userLocation;
            dispatch(signinRequestSuccess(user));
          }
        })
      }
  }
}

1 个答案:

答案 0 :(得分:1)

Redux操作无法执行异步操作。 使用像redux sagas这样的库来执行这些操作。 阅读有关Redux sagas和redux的副作用的知识,以及为什么不能将其用于异步操作。