我有一个异步函数,可以触发 AWS Amplify 向用户发送密码重置代码。
export async function forgotPassword(username) {
console.log('forgotPassword')
return Auth.forgotPassword(username)
.then(data => {
console.log('aws reset password request success')
console.log(data)
})
.catch(error => {
console.log('error with call to AWS forgotPassword fncn')
})
}
这是一个调用上面函数的包装函数...
forgotPassword(email).then(success => {
if (success) {
console.log('successful forgot password action')
Vue.prototype.$notification.success({
message: 'Forgot password action success',
description: 'You have successfully submitted a password refresh request!',
})
}
if (!success) {
console.log('failed forgot password action')
}
})
我知道内部函数成功运行,因为我用于调试该方法的控制台日志语句确实执行并打印了 'aws reset password request success'
。
但是,我的包装函数总是检测到 aws 函数中的失败,因为我看到包装函数进入了 !success 子句。为什么是这样?我猜测内部 aws 函数中的异步等待代码存在语法错误
更新,根据我目前阅读的答案,我更新了我的内部函数如下。
export async function forgotPassword(username) {
console.log('forgotPassword')
try {
const data = await Auth.forgotPassword(username)
console.log('aws password reset request success')
console.log(data)
return true
} catch (error) {
console.log('error with call to AWS forgotPassword fncn')
notification.warning({
message: error.code,
description: error.message,
})
}
}
它似乎工作正常。
答案 0 :(得分:3)
这是因为第一个函数返回的 promise 解析为 undefined。当您将 .then
链接到初始承诺时,您应该确保返回承诺应该使用的值:
.then(data => {
console.log('aws reset password request success')
console.log(data)
return data; // or: return true;
})