And*_*dez 22 javascript settimeout node.js async-await
我正在递归地运行 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)
Run Code Online (Sandbox Code Playgroud)
问题是:
jfr*_*d00 17
它立即调用它,因为这就是您的代码所做的。它ticker(1)立即执行函数调用。
当您从 调用ticker 时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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1401 次 |
| 最近记录: |