繁体   English   中英

如何使异步/等待风格的回调函数?

[英]How to make callback function in async/await style?

目前,我正在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 据我所知,我必须返回带有resole({})reject(err) new Promise 但是我不知道如何使用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方法。 在此处检查建议: http : //2ality.com/2017/05/util-promisify.html

对于其他实现,请考虑使用Bluebird Promise库或任何类似的库。 Bluebird承诺参考: http ://bluebirdjs.com/docs/api/promise.promisify.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM