gpt4 book ai didi

javascript - Node.js 检查几个 redis 集中的值并同步返回

转载 作者:可可西里 更新时间:2023-11-01 11:13:11 25 4
gpt4 key购买 nike

我有 7 个集合,我需要至少在一个集合中检查值是否存在 (sismember) 并返回 true 或 false。

我需要同步获取该值,如下所示:

const isExist = !!(_.max(_.range(7).map((day) => {
redis.sismember(`blacklist${day}`, hashToken, function (err, res) {
return res;
});
})));

最佳答案

只要可以避免,就永远不需要同步代码。

在这种情况下,我建议使用 Promises 来管理对 redis 的七个请求。

Bluebird promise library可以在一行代码中使大多数 API 兼容(阅读 promisification ),redis 的 API 也不异常(exception)。 (Bluebird 的文档甚至是 uses redis as an examplenode-redis documentation 也是如此,所以如果您关心这类事情,它甚至是“官方支持的”。)

因此,您似乎想要的是一个函数,该函数最多检查对 sismember 的七个异步调用,并在其中第一个结果为正时立即解析为总体正结果 - Promise#any()可以做到这一点。

var Promise = require('bluebird');
var _ = require('lodash');
var redis = require('redis');

Promise.promisifyAll(redis);

function checkBlacklist(hashToken) {
var blacklistChecks = _.range(7).map((day) => {
return redis.sismemberAsync(`blacklist${day}`, hashToken);
});
return Promise.any(blacklistChecks);
}

用法

checkBlacklist('some_token').then((result) => {
// do something with the result
}).catch((err) => {
// an error has occurred - handle it or rethrow it
});

关于javascript - Node.js 检查几个 redis 集中的值并同步返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39449745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com