我有一个简单的功能来注销(仅用于测试(,我想在操作完成时通知用户。首先想到的是要有承诺。
我试过这样,但有问题。我不太明白这些是如何工作的。我能做到这一点还是有更好的方法?
功能
logOut = () => {
this.props.logoutUser().then((passed) => {
if (passed) {
alert("You are now logged out!");
}
});
};
注销操作
export function logoutUser() {
return dispatch => {
new Promise(function (resolve, reject) {
dispatch(logout()).then((response) => {
return true;
}).catch((error) => {
return false;
});
});
}
}
function logout() {
return {
type: "LOGOUT"
}
}
注销功能的问题
export function logoutUser() {
return dispatch => {
new Promise(function (resolve, reject) {
dispatch(logout()).then((response) => {
resolve(true); // changed
}).catch((error) => {
reject(error); // changed
});
});
}
}
您必须传递回调函数resolve
才能成功,reject
传递失败。 参考此链接
更新:其次,您必须使用thunk
中间件,才能像Promise
对象一样dispatch
工作:github
你也可以用callback
来做到这一点,就像这样
logOut = () => {
this.props.logoutUser(result => {
if (result.success) {
alert("You are now logged out!");
return;
}
// Handle error
});
};
export function logoutUser(callback) {
logout()
.then(() => callback({ success: true }))
.catch(error => callback({ error }));
return dispatch => {
dispatch({
type: "LOGOUT"
});
};
}
function logOut() {
// log out function that returns a promise
}