如何解决将Promise转换为异步函数
我对javascript很陌生,正在尝试将以下代码转换为异步函数。据我了解,异步函数总是返回Promise。
// working code
export const getUser = (req: Express.Request,res: Express.Response) =>
new Promise((resolve,reject) => {
passport.authenticate('oauth-bearer',{ session: false },(err,user) => {
if (err) reject(err)
if (user) resolve(user)
else reject('Unauthorized')
})(req,res)
})
此承诺与await
关键字一起使用:
const user = await getUser(req,res)
到目前为止,我的尝试始终返回“功能”,而不是已解决或被拒绝的Promise:
// failing code
export const getUser = (req: Express.Request,res: Express.Response) =>
async () => {
return await passport.authenticate('oauth-bearer',user) => {
if (err) throw err
if (user) return user
else throw 'Unauthorized'
})(req,res)
}
感谢您指出我在这里做错了。
解决方法
您获得的是函数而不是Promise,因为new Promise
立即创建了一个承诺,但是async () => {}
仅在被称为的时候创建了一个承诺。
...但这是您最少的问题。
async
功能是管理现有承诺的工具。它们不能与promise构造函数自由互换。
passport.authenticate
不会返回承诺,因此您无法使用async
来管理承诺。
如上所述,您不能在此使用它。但是,如果您需要编写一个异步函数,它将看起来像这样。
# actual number
>>> int.from_bytes(int(-1234324354354353432432424 + 1).to_bytes(64,'little',signed=True),signed=True)
-1234324354354353432432423
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。