我正在递归运行 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)
问题是:最佳答案
它会立即调用它,因为这就是您的代码所做的。它执行 ticker(1)
立即调用函数。
当您从 setTimeout(ticker, ...)
调用电话时,你没有通过 minutes
该函数的参数 - 这就是 setTimeout()
的原因没有正确延迟。
如果你不希望它立即执行,那么去掉 IIFE并以 setTimeout()
开头.然后,当您调用 ticker()
来自 setTimeout()
回调,一定要传递minutes
参数,或者通过将第三个参数传递给 setTimeout()
或者为它做一个小回调函数。
这是一个实现:
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);
关于javascript - 带有 async/await 的递归 setTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65875198/