我正在尝试在我的本机应用程序中使用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));
}
})
}
}
}
答案 0 :(得分:1)
Redux操作无法执行异步操作。 使用像redux sagas这样的库来执行这些操作。 阅读有关Redux sagas和redux的副作用的知识,以及为什么不能将其用于异步操作。