Redis运行正常但Node.js调用zadd命令返回false的原因是什么
问题原因
- 你通过
bluebird的promisifyAll方法对redis模块做Promise化处理后,原有的回调式API(比如zadd)不会变为Promise方法,Promise化后的API会统一新增Async后缀,你应该调用zaddAsync而非zadd。 - 你使用的v3及更早版本的
node_redis,回调式API如果没有传入回调函数作为最后一个参数,会同步返回false表示操作未完成,不需要等待Redis服务端的响应。此时命令已经成功发送到Redis服务端执行,所以你在redis-cli可以查到写入的数据,但代码里拿到的返回值是同步的false。
修复代码
async zadd() { // 调用Promise化后的API,加await等待服务端返回结果 let result = await this.client.zaddAsync([ `person`, 0, `${JSON.stringify({ id: "aklas-djsadfdf3-034ukf", name: "Tiago Ribeiro", age: 42, })}`, 0, `${JSON.stringify({ id: "akljsdf-034ukf", name: "Cleber Machado", age: 29, })}`, ]); console.log(result); return result; }
修复后正常返回值为本次操作新增的元素个数,你本次插入2条新数据,返回值为2
内容的提问来源于stack exchange,提问作者Mikhael Abdallah
相关产品推荐
相关产品推荐

