【发布时间】:2020-08-17 14:08:45
【问题描述】:
我正在尝试找出在 Async Redux Thunk Action Creator 中运行 Async Action Creator 的正确实现。以下哪个方法是正确的?
方法一:
export const loginUser = () => async(dispatch) => {
try {
user = await LoginManager.logInWithPermissions(['public_profile', 'email']);
dispatch({type: LOGIN, payload: user});
dispatch({type:SAVE_USER_TO_DEVICE, payload:saveUserToDevice(user)});
} catch (error) {
console.log(error);
}
}
export const saveUserToDevice = async(user)=> {
try {
//saveUserToDeviceStatus returns true if successful, otherwise returns an object
const saveUserToDeviceStatus = await Keychain.setGenericPassword('user', JSON.stringify(user));
return (saveUserToDeviceStatus? true: false);
} catch (error) {
console.log(error);
}
}
方法二: saveUserToDevice 自行调度
export const loginUser = () => async(dispatch) => {
try {
user = await LoginManager.logInWithPermissions(['public_profile', 'email']);
dispatch({type: LOGIN, payload: user});
saveUserToDevice(user);
} catch (error) {
console.log(error);
}
}
export const saveUserToDevice = (user) => async(dispatch) => {
try {
//saveUserToDeviceStatus returns true if successful, otherwise returns an object
const saveUserToDeviceStatus = await Keychain.setGenericPassword('user', JSON.stringify(user));
saveUserToDeviceStatus = saveUserToDeviceStatus? true: false;
dispatch({type: SAVE_USER_TO_DEVICE, payload: saveUserToDeviceStatus});
} catch (error) {
console.log(error);
}
}
方法三: saveUserToDevice 返回动作对象
export const loginUser = () => async(dispatch) => {
try {
user = await LoginManager.logInWithPermissions(['public_profile', 'email']);
dispatch({type: LOGIN, payload: user});
const saveUserToDeviceAction = await saveUserToDevice(user);
dispatch(saveUserToDeviceAction);
} catch (error) {
console.log(error);
}
}
export const saveUserToDevice = async(user) => {
try {
//saveUserToDeviceStatus returns true if successful, otherwise returns an object
const saveUserToDeviceStatus = await Keychain.setGenericPassword('user', JSON.stringify(user));
saveUserToDeviceStatus = saveUserToDeviceStatus? true: false;
return {type: SAVE_USER_TO_DEVICE, payload: saveUserToDeviceStatus};
} catch (error) {
console.log(error);
}
}
方法四: saveUserToDevice 返回布尔值,在 loginUser 内部触发 dispatch
export const loginUser = () => async(dispatch) => {
try {
user = await LoginManager.logInWithPermissions(['public_profile', 'email']);
dispatch({type: LOGIN, payload: user});
const saveUserToDeviceAction = await saveUserToDevice(user);
dispatch({type: SAVE_USER_TO_DEVICE, payload: saveUserToDeviceAction});
} catch (error) {
console.log(error);
}
}
export const saveUserToDevice = async(user) => {
try {
//saveUserToDeviceStatus returns true if successful, otherwise returns an object
const saveUserToDeviceStatus = await Keychain.setGenericPassword('user', JSON.stringify(user));
saveUserToDeviceStatus = saveUserToDeviceStatus? true: false;
return saveUserToDeviceStatus;
} catch (error) {
console.log(error);
}
}
【问题讨论】:
标签: reactjs react-native redux react-redux redux-thunk