【问题标题】:JavaScript array is stuck in pending [duplicate]JavaScript数组卡在待处理[重复]
【发布时间】:2021-07-21 19:19:53
【问题描述】:

我遇到了一个问题,即 JavaScript 数组卡在待处理状态。是不是因为请求太多?

const removeBots = async(arr) => {
  try {
    for (let i = 0; i < arr.length; i++) {
      console.log(i)
      axios.get(`https://api.etherscan.io/api?module=account&action=txlist&address=${arr[i]}&apikey=${apiKey}`)
        .then(res => console.log(res.data.result.length))
    }
    console.log("Done");
    console.log(walletsFinal);
  } catch (e) {
    console.log("error", e)
  }
}

编辑-我注意到反引号的格式问题并修复了它。我正在尝试解决 API 每秒调用次数限制为 5 次的问题。

【问题讨论】:

  • “卡在待处理”是什么意思?你的意思是 AJAX 调用吗?
  • “数组卡在挂起”是什么意思?
  • 由于您在调用axios.get() 时没有使用await,因此您的循环应该立即结束,而无需等待AJAX​​ 请求完成。
  • @Barmar 没有等待,但 OP 使用 .then 语法,所以这不应该是问题。
  • @Voodu 使用.then() 使console.log() 等待响应,但不会使循环等待。

标签: javascript


【解决方案1】:

如果您的问题是您被限制为每秒 5 次 api 调用,那么只需在每次调用之间等待 200 毫秒(250 毫秒是安全的)。

// https://stackoverflow.com/a/39914235/12101554
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));

const removeBots = async(arr) => {
  try {
    for (let i = 0; i < arr.length; i++) {
      console.log(i)
      const res = await axios.get(`https://api.etherscan.io/api?module=account&action=txlist&address=${arr[i]}&apikey=${apiKey}`);
      console.log(res.data.result.length);
      await sleep(250);
    }
    console.log("Done");
    console.log(walletsFinal);
  } catch (e) {
    console.log("error", e)
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多