首页 > 解决方案 > 如何等待 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

标签: node.jsexpresserror-handlingredisasync-await

解决方案


推荐阅读