首页 > 解决方案 > 如何以异步/等待风格制作回调函数?

问题描述

目前我正在使用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})
        })

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

标签: javascriptasync-awaites6-promise

解决方案


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);
      }
    });
  });
}

然后,您可以将其称为:

const token = await sign(user.accountID, user.email, process.env.SECRET_KEY);

推荐阅读