UNPKG

cable_ready

Version:

CableReady helps you create great real-time user experiences by making it simple to trigger client-side DOM changes from server-side Ruby.

32 lines (22 loc) 612 B
let consumer const BACKOFF = [25, 50, 75, 100, 200, 250, 500, 800, 1000, 2000] const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms)) const getConsumerWithRetry = async (retry = 0) => { if (consumer) return consumer if (retry >= BACKOFF.length) { throw new Error("Couldn't obtain a Action Cable consumer within 5s") } await wait(BACKOFF[retry]) return await getConsumerWithRetry(retry + 1) } export default { setConsumer (value) { consumer = value }, get consumer () { return consumer }, async getConsumer () { return await getConsumerWithRetry() } }