如何以承诺返回数据?我的下面代码工作正常但是当我将其切换为promise时,它不会返回任何数据。
export function userSignupRequest(username, password) {
return (dispatch) => {
if (username === 'hello@world.com' && password === 'admin') {
console.log('Sign up success')
dispatch(setLoginSuccess(true));
return userAccountDataFromSever
} else {
console.log('Sing up failed')
return new Error('Will be an error message from server')
}
}
}
我可以通过userAccountDataFromSever
从上面的代码中获得new Error('Will be an error message from server')
或console.log(userSignupRequest(email, password))
但是,当我将其切换到下面时,它会返回undefined
。
export function userSignupRequest(username, password) {
return (dispatch) => {
Auth.signUp({
username,
password
})
.then(data => {
console.log(data)
dispatch(setLoginSuccess(true));
return data;
})
.catch(err => {
console.log(err)
return new Error(err.message)
});
}
}
我如何使这项工作?
答案 0 :(得分:2)
由于userSignupRequest
将执行异步操作,因此它将成为异步函数。
当前在异步函数中'返回'值的方法是返回一个promise,然后使用.then()。catch()语法。
返回承诺的函数示例:
export function userSignupRequest(username, password) {
return (dispatch) => {
return new Promise((resolve, reject) => {
Auth.signUp({
username,
password
})
.then(data => {
console.log(data)
dispatch(setLoginSuccess(true));
return resolve(data);
})
.catch(err => {
console.log(err)
return reject(err);
});
});
}
}
使用示例:
userSignupRequest('admin', 'admin')(dispatch)
.then(user => console.log(`User ${user} signed up!`)
.catch(err => console.error(err);