javascript - Javascript 承诺返回数据
问题描述
如何用承诺返回数据?我下面的代码工作正常,但是当我将其切换为承诺时,它不会返回任何数据。
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)
});
}
}
我该如何进行这项工作?
解决方案
既然userSignupRequest
会做异步操作,就变成了一个异步函数。
当前在异步函数中“返回”值的方法是返回一个承诺,然后使用 .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);
推荐阅读
- ios - 如何在 Xcode 中为 XIB 文件设置默认色调?
- javascript - 如何在 Next.js 中使用 Material UI?
- java - Hibernate HSQL 使用嵌套列表选择新的
- c - Linux uprobe 如何处理断点?
- microsoft-graph-api - 使用 v2.0 和 v1.0 的 Mircosoft Graph API 身份验证令牌
- java - MyBatis SQL Builder 类 LIKE 与 %
- python - 如何在open3d中导入o3dtut
- drake - 在每个离散时间点从 MathematicalProgram 中围绕决策变量 (x, u) 线性化非线性系统的方法
- java - 如何在 Java 中使用字符串调用类的变量
- java - 获取字符数组的特定组合