You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何改写Promise风格的Redis取值函数使其返回正确值?

Redis异步函数返回值问题

以下是两个从Redis获取键值的函数:

async function getRedisKeyAsync(key){
    var value = await client.get(key);
    console.log('got value ' + value + ' for key ' + key + ' in redis');
    return value;
}

async function getRedisKeyPromise(key){
    client.get(key).then(
        (value) => {
            console.log('got value ' + value + ' for key ' + key + ' in redis');
            return value;
        }
    );
}

两种方式都能正确从Redis中获取对应键的值,但调用时只有第一种能返回值:

var value1 = await myredis.getRedisKeyAsync(req.params.key); // 正常返回值

var value2 = await myredis.getRedisKeyPromise(req.params.key); // value2为undefined

解决方案

问题核心是getRedisKeyPromise函数没有返回Promise对象,内部then回调返回的value无法被外层的await捕获。只需修改函数,让它返回client.get(key)生成的Promise链即可:

async function getRedisKeyPromise(key){
    // 返回整个Promise链,让await能捕获最终的value
    return client.get(key).then(
        (value) => {
            console.log('got value ' + value + ' for key ' + key + ' in redis');
            return value;
        }
    );
}

修改后,getRedisKeyPromise的行为就和getRedisKeyAsync完全一致了——调用时用await可以正常获取到Redis返回的值。

内容的提问来源于stack exchange,提问作者Stubborn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 16:27:25