Javascript 如何以异步/等待方式创建回调函数?

Javascript 如何以异步/等待方式创建回调函数?,javascript,async-await,es6-promise,Javascript,Async Await,Es6 Promise,目前我正在node.js应用程序中使用jwt。我使用的jwt.sign()方法如下所示: jwt.sign({ accountID: user.accountID, email: user.email, }, process.env.SECRET_KEY, (err, token) => { if (err) throw err res.json({token})

目前我正在node.js应用程序中使用
jwt
。我使用的
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
。正如我所知,我必须返回
新承诺
拒绝(err)
。但我不知道如何使用sign()方法中的promise。谢谢你的帮助。谢谢

JavaScript(以及像Bluebird这样的库)有一个内置的promisify函数,如
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);

如果在node.js 8中使用上述代码,则可以使用promisify方法。请在此处查看提案:


对于其他实现,考虑使用BryBooRead库或任何类似的库。Bluebird promisify reference:

只需将其全部封装在一个函数中,并在显示的代码前加上“return wait”(返回等待),就可以了。Node.js 8+这样的库像Bluebird一样有一个名为
.promisify()
——Node.js内置的
util
模块也是如此。感谢大家的提醒!在节点6着陆时被卡住了一段时间。很高兴看到他们将这一功能融入其中!