[Question] Using RateLimiterQueue with RateLimiterRedis
I am experimenting with using `RateLimiterQueue` with `RateLimiterRedis` but am facing some issues with my proof of concept code.

Here are a few tests that I wrote with `Jest` to explore and learn how `rate-limiter-flexible` works. (These tests do not really have assertions. I am just using them to run some code)

I have explained in the comments under each test what went wrong. 

In `package.json` file:
```
"rate-limiter-flexible": "^2.3.8"
"ioredis": "^5.2.3"
"redis": "^4.3.0"
```

Redis server is running in a docker container
```
docker run  \
  --detach \
  --restart=always \
  --publish 6379:6379 \
  --name myredis \
  redis:7.0.4-bullseye
```


In `rate.limiter.test.js` file:
```javascript
import Redis from "ioredis";
import { createClient } from "redis";
import {
  RateLimiterRedis,
  RateLimiterMemory,
  RateLimiterQueue,
} from "rate-limiter-flexible";

it("Uses rate limiter queue with memory", async () => {
  const rateLimiterMemory = new RateLimiterMemory({
    points: 2,
    duration: 1, // second
  });
  const limiter = new RateLimiterQueue(rateLimiterMemory);
  const arr = [1, 2, 3, 4, 5];
  for (const element of arr) {
    await limiter.removeTokens(1);
    console.log({ element });
  }
});
/**
 * The above code runs as expected: it prints 2 numbers,
 * waits for about 1 sec and repeats this until all numbers are printed.
 */

it("Uses rate limiter queue with ioredis client", async () => {
  const redisClient = new Redis();
  const rateLimiterRedis = new RateLimiterRedis({
    storeClient: redisClient,
    points: 2,
    duration: 1, // second
  });
  const limiter = new RateLimiterQueue(rateLimiterRedis);
  const arr = [1, 2, 3, 4, 5];
  for (const element of arr) {
    await limiter.removeTokens(1);
    console.log({ element });
  }
});
/**
 * The above code runs as expected: it prints 2 numbers,
 * waits for about 1 sec and repeats this until all numbers are printed.
 * 
 * BUT:
 *
 * The test does not finish and shows the following message:
 *
 * Jest did not exit one second after the test run has completed.
 * This usually means that there are asynchronous operations that weren't stopped in your tests.
 * Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
 *
 * Why didn't the test exit? Should we clean up something here?
 */

it("Uses rate limiter queue with Redis client", async () => {
  const redisClient = createClient({
    legacyMode: true,
    enable_offline_queue: false,
  });
  const rateLimiterRedis = new RateLimiterRedis({
    storeClient: redisClient,
    points: 2,
    duration: 1, // second
  });
  const limiter = new RateLimiterQueue(rateLimiterRedis);
  const arr = [1, 2, 3, 4, 5];
  for (const element of arr) {
    await limiter.removeTokens(1);
    console.log({ element });
  }
});
/**
 * The above does not run and throws an error:
 * 
 * The client is closed
 * 
 *      at Commander._RedisClient_sendCommand (node_modules/@redis/client/dist/lib/client/index.js:415:31)
 *      at Commander.sendCommand (node_modules/@redis/client/dist/lib/client/index.js:375:93)
 *      at Commander.<computed> (node_modules/@redis/client/dist/lib/client/index.js:412:27)
 *      at node_modules/rate-limiter-flexible/lib/RateLimiterRedis.js:89:25
 *      at RateLimiterRedis._upsert (node_modules/rate-limiter-flexible/lib/RateLimiterRedis.js:58:12)
 *      at node_modules/rate-limiter-flexible/lib/RateLimiterStoreAbstract.js:203:12
 *      at RateLimiterRedis.consume (node_modules/rate-limiter-flexible/lib/RateLimiterStoreAbstract.js:195:12)
 *      at node_modules/rate-limiter-flexible/lib/RateLimiterQueue.js:70:32
 *
 * Why "The clinet is closed" message? ioredis could connect with no problem. 
 * I also followed the instructions and used `legacyMode: true` when creating redis client.
 * What do you think is wrong here?
 */
```