我正在运行一个递归的setTimeout,因此我每分钟只想调用一次API。
这是我的代码:
;(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)
问题是:
- 当我启动服务器时,它会立即调用API
- 第二次调用需要一分钟(预期行为)
- 在第二次调用之后,它开始顺序调用API,没有超时
setInterval
的人吗? - Rohit KashyapsetInterval
的作用不同。它会在interval
毫秒后无论如何都调用一个函数。相反,OP 可能希望定时器在请求成功或出错后开始计时。 - Christian Vincenzo TrainasetInterval
每隔一分钟调用一次API呢?如果您需要更多对setInterval
的控制,可以根据您的条件清除间隔。闭包有人吗?此外,OP在finally
中使用了setTimeout
。这会有什么区别呢?@CristianTraìna - Rohit Kashyapcoingecko.global()
函数需要 3 秒才能完成,使用 OP 方法后间隔为 63 秒,而使用setInterval
则为 60 秒。 - Christian Vincenzo Traina