如何以 async/await 风格制作回调函数?

Nas*_*tro 3 javascript async-await es6-promise

目前我正在使用jwtnode.js 应用程序。我使用如下所示的jwt.sign()方法:

jwt.sign({
            accountID: user.accountID,
            email: user.email,

        }, process.env.SECRET_KEY, (err, token) => {

            if (err) throw err
            res.json({token})
        })
Run Code Online (Sandbox Code Playgroud)

我不想使用回调。我想将其转换为async/await. 据我所知,我必须new Promiseresole({})和返回reject(err)。但我不知道如何使用 sign() 方法中的 promise。任何帮助表示赞赏。谢谢!

Jpe*_*c07 8

JavaScript(以及像 Bluebird 这样的库)有一个内置的 promisify 函数 as util.promisify(),它将采用像这样的标准回调格式的函数并将它们转换为异步承诺。但是,您可以通过在新的 Promise 调用中包装您尝试承诺的函数来进行幕后工作并自己运行它。如果该实用程序失败,我会执行以下操作:

function sign(id, email, secret) {
  return new Promise((resolve, reject) => {
    jwt.sign({ accountID: id, email: email }, secret, (error, token) => {
      if (error) {
        reject(error);
      } else {
        resolve(token);
      }
    });
  });
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以将其称为:

const token = await sign(user.accountID, user.email, process.env.SECRET_KEY);
Run Code Online (Sandbox Code Playgroud)

  • Node.js 8+ 有 [util.promisify](https://nodejs.org/api/util.html#util_util_promisify_original) (2认同)
  • _所以像 Bluebird 这样的库有一个名为 `.promisify()`_ 的方法——Node.js 内置的 `util` 模块也是如此。 (2认同)