将Promise转换为异步函数

时间:2020-08-20 07:31:09

标签: javascript promise es6-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', { session: false }, (err, user) => {
      if (err) throw err
      if (user) return user
      else throw 'Unauthorized'
    })(req, res)
  }

感谢您指出我在这里做错了。

2 个答案:

答案 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