如何在map()函数内使用setInterval()在JS中延迟1秒对API调用进行排队

问题描述 投票:1回答:2

我有一个函数getData,可从外部api获取数据。如果我每秒发出1个以上的请求,则会收到503错误。因此,我正在考虑将API请求排队,但是这些调用仍然被完全批处理,并且出现相同的503错误。

我将本地存储数据解析为对象(每个对象都会发出一个单独的API请求),并且如果对象多于一个,我希望将所有后续API调用排队1秒。这是我的代码:

const lsData = JSON.parse(localStorage.getItem('weatherappData'));
if (lsData) {
    lsData.map((location, index) => {
        const city = location.city;
        const country = location.country;
        if (index === 0) {
            getData(city, country, table);
        } else {
            setTimeout(() => getData(city, country, table), 1000);
        }
    });
}

我在做什么错?谢谢!

javascript settimeout
2个回答
1
投票

.map()不等待上一个callback。您可以将1000乘以index

setTimeout(() => getData(city, country, table), index * 1000);

或使用async/await

(async() => {
  for (const [index, {city, country}] of lsData.entries()) {
    try {
      if (index === 0) {
        await getData(city, country, table);
      } else {
        await new Promise(resolve => setTimeout(() => resolve(getData(city, country, table)), 1000))
      }
    } catch(e) {
        console.error(e)
    }
  }
})()

注意,table未在问题代码处定义。


0
投票

java rest api中可能吗?

© www.soinside.com 2019 - 2024. All rights reserved.