Redux返回承诺
问题描述:
我有一个简单的功能来注销(仅用于测试),并且我想在操作完成时通知用户。首先想到的是用承诺来做到这一点。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
失败。 请参阅本link
更新:其次,你必须使用thunk
中间件,工作dispatch
像Promise
对象:github
+0
我仍然收到错误“Uncaught TypeError:Can not read property'then'of undefined”:( –
+0
检查更新后的答案.. –
答
,你也可以做到这一点与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
}
你的方法是正确的。确保你使用的是“thunk”中间件,并且你的thunk返回Promise。 –
我应该有thunk工作,因为我将其与包含“fetch”的其他操作一起使用。这一次我想不使用'fetch'来使用它:) –
虽然这是同样的方法,因为'fetch'也返回一个Promise。如果你的thunk会返回Promise,你可以在组件中使用它('return new Promise ...')。 –