node.js - 如何等待 redis 操作并在 node.js 中捕获错误?
问题描述
我想要做的是(使用 express,redis 模块):
router.post('/', async (req, res, next) => {
try {
await client.set('key', value)
} catch (err) {
return next(err)
}
// should not be reached here if an error occured.
})
也就是说,我想捕获错误并返回,以便无法执行其余代码。我尝试promisifyAll
使用 bluebird and client.setAsync
,但 catch 没有用。
[编辑]
我故意使用错误的 url 进行连接。因此,应该发生错误。如果我将回调client.set
作为第三个参数传递给函数,我可以看到错误日志:
Error: Redis connection to asdf:6379 failed - connect ETIMEDOUT 216.157.88.27:6379
但是,我不能await
这样。
幸运的是,我发现util.promisify
这样的效果很好:
const client = redis.createClient()
const setAsync = util.promisify(redisClient.set.bind(redisClient))
...
try {
await setAsync('key', value)
}
...
我不知道为什么蓝鸟不起作用。我所做的是:
bluebird.promisifyAll(redis)
const client = redis.createClient()
...
try {
await client.setAsync('key', value)
}
...
我引用了这个文档https://github.com/NodeRedis/node_redis#bluebird-promises
解决方案
推荐阅读
- azure - Azure BLOB 存储幻象请求
- c# - 具有复杂类型参数的 RedirectToAction
- php - 使用 Laravel 在其他表中显示产品名称
- java - 如何摆脱 instanceOf 使用 RxJava 实现 Firebase 注册
- jxbrowser - JX browser 6.21 初始化失败
- date - 在 xslt 或 TIBCO BW 中将多个 dateTime 字符串解析为 dateTime 格式
- c# - 我应该将不同的 NavMesh 放在不同的类中吗?
- google-cloud-bigtable - Cloud Bigtable 行数的性能
- html - 输入复选框在刷新时取消选中
- wordpress - 如何仅针对某些文件类型/扩展名发出 410 标头(已消失)