javascript - 如何以异步/等待风格制作回调函数?
问题描述
目前我正在使用jwt
node.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() 方法中的承诺。任何帮助表示赞赏。谢谢!
解决方案
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);
推荐阅读
- angular - 如何在另一个组件中使用一个组件
- javascript - 希望获得不断变化的 LocalStorage 值
- angular - 安装“npm i angularfire2”时出错
- recharts - 如何为 Rechart 组件创建自定义组件
- hive - hive 是否有任何 api 来检查 sql 但不执行它?
- nativescript - 在 Angular Web 应用程序的同一个打字稿文件中导入 TNS 模块
- javascript - 无法在 setInterval 函数中仅返回一次输出
- mysql - 具有 LIMIT 降序排列的 MySQL 查询不起作用
- asp.net-core - Entity Framework Core:不允许新事务,因为会话中正在运行其他线程
- python - 避免在 Python 中使用尾随换行符