【发布时间】:2021-01-24 19:51:25
【问题描述】:
我正在递归运行 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吗? -
@RohitKashyap
setInterval做了不同的工作。无论如何,它都会在interval毫秒后调用一个函数。相反,OP 可能希望计时器在请求成功或出错后启动 -
每分钟调用一次 API。那么为什么不调用一次API,使用
setInterval每隔一分钟调用一次API。如果您需要进一步控制setInterval,请根据您的条件清除间隔。关闭任何人?而且,OP 在finally中使用setTimeout。究竟会有什么不同? @CristianTraìna -
@RohitKashyap 假设承诺
coingecko.global()需要 3 秒来实现,在 OP 方法中,间隔是 63 秒,而不是setInterval它将是 60 秒 -
@CristianTraìna 是的,这就是 OP 想要的吧?每分钟调用一次 API。不确定我在这里缺少什么?
标签: javascript node.js async-await settimeout