我对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', { session: false }, (err, user) => {
if (err) throw err
if (user) return user
else throw 'Unauthorized'
})(req, res)
}
感谢您指出我在这里做错了。
答案 0 :(得分:2)
您获得的是函数而不是Promise,因为new Promise
立即创建了一个承诺,但是async () => {}
仅在被称为的时候创建了一个承诺。
...但这是您最少的问题。
async
功能是管理现有承诺的工具。它们不能与promise构造函数自由互换。
passport.authenticate
不会返回承诺,因此您无法使用async
来管理承诺。
答案 1 :(得分:-1)
如上所述,您不能在此使用它。但是,如果您需要编写一个异步函数,它将看起来像这样。
# actual number
>>> int.from_bytes(int(-1234324354354353432432424 + 1).to_bytes(64, 'little', signed=True), 'little', signed=True)
-1234324354354353432432423