javascript 在列表仍包含元素时重新运行函数

bt1cpqcv  于 2023-01-01  发布在  Java
关注(0)|答案(1)|浏览(138)

我认为这可能是一个相当小的问题,但我仍然是相当新的节点和Javascript。
我有一个列表和一个函数如下:

var my_list = [1, 7, 9, 112, 15, 17, 19, 25, ...]
// Main search function
const search = async(_) => {
  // Loop from ID 1 to X
  for (let index = 1; index < 10000; index++) {
    if (my_index.indexOf(index) !== -1) {
      // Try to find a brewery with this ID
      const brewery = await findBreweriesById(index);
      // If it's found ..
      if (brewery) {
        console.log(brewery.brewery_name);
      }
    } else {
      console.log(`Nothing found for ID ${index}..`);
    }
  }
  console.log("Finished searching!");
};

search();

该函数将作为对速率受限API的调用运行,这意味着并非my_list中的所有值都将被一次提取。我必须重复提取函数。我想要做的是能够从主列表中删除任何成功提取的值,即my_list,并重新运行该函数,直到my_list中的所有值都已被提取。
我知道两件事,
1.我需要从列表中删除获取的索引元素,我已经发现可以使用my_list.splice(indexOf(index),1)来完成此操作
1.我知道我可以使用while循环,但是我不知道我应该把它放在哪里,设置什么条件,这也让我很困惑,不知道我应该在哪里拼接来删除元素。
任何帮助都将不胜感激。

    • EDIT**更具体地说,API调用的速率限制为每分钟100次调用。之后,它将返回一个429 Too many requests。因此,我希望删除所有200返回并循环,即重新运行应保留在列表中的429的函数。
abithluo

abithluo1#

或许试试这个:

var my_list = [ 1, 7, 9, 112, 15, 17, 19, 25 ]

// Main search function
const search = async _ => {
  while( my_list.length > 0 ){
    const index = my_list[my_list.length - 1]
  
    // Try to find a brewery with this ID
    const brewery = await findBreweriesById(index);
    if (brewery) {
      my_list.splice(indexOf(index),1)
      console.log(brewery.brewery_name);     
    } else {
      console.log(`Nothing found for ID ${index}..`);
    }
  }
}

search();

相关问题