Redux 返回承诺



我有一个简单的功能来注销(仅用于测试(,我想在操作完成时通知用户。首先想到的是要有承诺。

我试过这样,但有问题。我不太明白这些是如何工作的。我能做到这一点还是有更好的方法?

功能

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
}

最新更新