gpt4 book ai didi

javascript - 带有 async/await 的递归 setTimeout

转载 作者:行者123 更新时间:2023-12-03 10:06:26 25 4
gpt4 key购买 nike

我正在递归运行 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,没有超时
  • 最佳答案

    它会立即调用它,因为这就是您的代码所做的。它执行 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com