当前,我正在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
。据我所知,我必须返回new Promise
和resole({})
和reject(err)
。但是我不知道如何使用sign()方法中的promise。任何帮助表示赞赏。谢谢!
答案 0 :(得分:2)
JavaScript(以及诸如Bluebird之类的库)具有内置的承诺函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);
答案 1 :(得分:-2)
如果在node.js 8中使用以上代码,则可以使用promisify方法。在此处检查建议:http://2ality.com/2017/05/util-promisify.html
对于其他实现,请考虑使用Bluebird Promise库或任何类似的库。蓝鸟承诺参考:http://bluebirdjs.com/docs/api/promise.promisify.html