@srsl/tools
Version:
JavaScript tools for common interfaces
32 lines (29 loc) • 896 B
JavaScript
const bluebird = require('bluebird')
const { createClient, RedisClient, Multi } = require('redis')
const { sleep } = require('../utils')
module.exports = async (
attempts = Infinity,
interval = 3000,
onError = (e) => console.error('[Redis] Connection Error', e),
host = process.env.REDIS_HOST,
port = process.env.REDIS_PORT
) => {
console.log(`[Redis] Connecting to redis host ${host}:${port}...`)
try {
/* Use promises for Redis methods */
bluebird.promisifyAll(RedisClient.prototype)
bluebird.promisifyAll(Multi.prototype)
const client = await createClient({
host,
port,
})
client.on('error', err => console.error('[Redis] Error:', err))
console.log('[Redis] Connected.')
return client
} catch (e) {
onError(e)
await sleep(interval)
if (attempts === 0) return onError()
return run(attempts, interval, onError)
}
}