I'm running a setTimeout, recursively, so I only want to call the API one time per minute.
Here is my code:
;(async function ticker (minutes) { try { const res = await coingecko.global() const { market_cap_percentage } = res.data.data dominance = { btc: market_cap_percentage.btc, eth: market_cap_percentage.eth } console.log({ dominance }) } catch (ex) { console.log(ex.message) } finally { setTimeout(ticker, minutes * 60 * 1000) } })(1) The problem is:
It calls it immediately because that's what your code does. It executes the ticker(1) function call immediately.
When you call ticker from the setTimeout(ticker, ...), you aren't passing the minutes parameter to that function - that's why the setTimeout() doesn't delay properly.
If you don't want it executed immediately, then get rid of the IIFE and just start it with a setTimeout(). And, then when you call ticker() from the setTimeout() callback, be sure to pass the minutes arguments to it, either by passing the third argument to setTimeout() or by making a little callback function for it.
Here's one implementation:
async function ticker(minutes) { try { const res = await coingecko.global() const { market_cap_percentage } = res.data.data dominance = { btc: market_cap_percentage.btc, eth: market_cap_percentage.eth } console.log({ dominance }) } catch (ex) { console.log(ex.message) } finally { setTimeout(ticker, minutes * 60 * 1000, minutes); } } setTimeout(ticker, minutes * 60 * 1000, 1);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With