编辑:原来是导致这个的节点。for 循环在等待 promise 解决之前以某种方式运行下一次迭代。Redis 在这里不做任何事情。
我有一个程序可以遍历一系列我想与 Redis 中的键进行比较的东西。如果条件已满,我想从数据库中删除密钥。我正在为此使用ioredis。代码如下:
async function checkthings () {
for (const thing of list_of_things) {
await new Promise(function (resolve, reject){
let stream = redis.scanStream({ match: '5:*'})
stream.on("data", async function (result){
result.length > 0 ? console.log(result) : null;
stream.pause();
for (const key of result) {
let result = await redis.hgetall(key);
if ([CONDITIONS PUT HERE])
await redis.del(key);
}
stream.resume();
})
stream.on("end", function (){
console.log("Done iterating.");
resolve();
})
});
}
}
}
问题是当我运行这段代码时,在第一次迭代时一切正常。但是在第二次迭代中,应该删除的键被列在了 SCAN 结果中。即使使用 KEYS 仍然会显示它。我不知道这是否是我的 Node.JS 或 Redis 的错误。
抱歉,如果问题难以阅读。这是我的第一个问题。