Javascript 如何连续使用数组中的parms进行api调用

Javascript 如何连续使用数组中的parms进行api调用,javascript,infinite-loop,Javascript,Infinite Loop,我有一个数组,其中有一些值应该作为参数传递给api调用。 我想用api调用的结果更新数据。我想用数组的每个值每1秒调用一次api 例如: constpeople=[1,2,3,4,5]; people.forEach((个人,索引)=>{ 设置超时(()=>{ 取回(`https://swapi.dev/api/people/${person}/`) .then(res=>res.json()) 。然后(数据=>{ //做一些事情,例如:更新用户界面 console.log(data.name

我有一个数组,其中有一些值应该作为参数传递给api调用。 我想用api调用的结果更新数据。我想用数组的每个值每1秒调用一次api

例如:

constpeople=[1,2,3,4,5];
people.forEach((个人,索引)=>{
设置超时(()=>{
取回(`https://swapi.dev/api/people/${person}/`)
.then(res=>res.json())
。然后(数据=>{
//做一些事情,例如:更新用户界面
console.log(data.name);
})
},指数*1000);

});
为了获得所需的行为,您可以使用
setInterval()
,间隔时间为
people
数组的长度

const people = [1, 2, 3, 4, 5];

setInterval(() => {
  people.forEach((person, index) => {
    setTimeout(() => {
      fetch(`https://swapi.dev/api/people/${person}/`)
        .then(res => res.json())
        .then(data => {
          // do stuff, eg : update UI
          console.log(data.name);
        })
     }, index * 1000);
  });
}, people.length * 1000);
但是现在你对你的服务器非常健谈,我建议你做一个批量获取,在这里你可以一次获取所有用户,而不是单独获取(你可以更频繁地调用,以使ui尽可能保持最新)。我假设这是您的api,如果您愿意,可以添加一个新函数

const people = [1, 2, 3, 4, 5];

setInterval(() => {
  people.forEach((person, index) => {
    fetch(`https://swapi.dev/api/people/getList/`, {
         method: 'GET',
         body: JSON.stringify(people)
      })
      .then(res => res.json())
      .then(data => {
        // do stuff, eg : update UI
        console.log(data.name);
      })
  });
}, 3000);

您可以使用
setInterval()
people
数组长度的间隔时间来获得所需的行为

const people = [1, 2, 3, 4, 5];

setInterval(() => {
  people.forEach((person, index) => {
    setTimeout(() => {
      fetch(`https://swapi.dev/api/people/${person}/`)
        .then(res => res.json())
        .then(data => {
          // do stuff, eg : update UI
          console.log(data.name);
        })
     }, index * 1000);
  });
}, people.length * 1000);
但是现在你对你的服务器非常健谈,我建议你做一个批量获取,在这里你可以一次获取所有用户,而不是单独获取(你可以更频繁地调用,以使ui尽可能保持最新)。我假设这是您的api,如果您愿意,可以添加一个新函数

const people = [1, 2, 3, 4, 5];

setInterval(() => {
  people.forEach((person, index) => {
    fetch(`https://swapi.dev/api/people/getList/`, {
         method: 'GET',
         body: JSON.stringify(people)
      })
      .then(res => res.json())
      .then(data => {
        // do stuff, eg : update UI
        console.log(data.name);
      })
  });
}, 3000);

这最初是由@Chris G提供的

这个很有魅力

constpeople=[1,2,3,4,5];
所有功能(个人){
取回(`https://swapi.dev/api/people/${person}/`)
.then(res=>res.json())
。然后(数据=>{
//做一些事情,例如:更新用户界面
console.log(data.name);
});
}
people.forEach((个人,索引)=>{
设置超时(()=>{
全部(人);
设置间隔(()=>{
全部(人);
},人。体长*1000);
},指数*1000);

});这最初由@Chris G提供

这个很有魅力

constpeople=[1,2,3,4,5];
所有功能(个人){
取回(`https://swapi.dev/api/people/${person}/`)
.then(res=>res.json())
。然后(数据=>{
//做一些事情,例如:更新用户界面
console.log(data.name);
});
}
people.forEach((个人,索引)=>{
设置超时(()=>{
全部(人);
设置间隔(()=>{
全部(人);
},人。体长*1000);
},指数*1000);


});setInterval()
,而不是一段时间。您的api是否可以更改为接受任意数量的人,而不是一次只接受一个人?他们的数据多久变化一次?我的意思是:你有没有看我的小提琴?我将调用移动到一个函数,并在初始循环中调用它,以防止延迟。这是一个非常糟糕的主意,因为while循环迭代不会等待超时。这样,您将每秒安排数千次超时。您可以使用外部间隔,使循环每5秒运行一次(快速但错误的修复),也可以使用交错间隔。请您解释一下,我建议您至少执行一次
setInterval()
,而不是一段时间。您的api是否可以更改为接受任意数量的人,而不是一次只接受一个人?他们的数据多久变化一次?我的意思是:你有没有看我的小提琴?我将调用移动到了一个函数,我在初始循环中调用它是为了防止这种延迟。api返回的数据也在实时更新,因此我认为我必须继续调用以获得更新的数据data@me.nkr这就是
setInterval
在这里所做的,而不是
setTimeout
@me.nkr Chris是对的,函数
setInterval()
基本上是一个无限循环,您可以为每次迭代设置延迟。那么间隔应该是多少?它是否比使用while(true)的infinte循环更好?@me.nkr间隔为
people.length*1000
。因此,如果你有10个人,它将等待10秒,然后再给第一个人打电话。如果你有5个人,它会等5秒钟再给第一个人打电话。而且它更好,因为
while(true)
运行速度最快。它不会等待settimeout完成它的工作api返回的数据也会实时更新,所以我想我必须继续调用以获取更新的数据data@me.nkr这就是
setInterval
在这里所做的,与
setTimeout
@me.nkr相反,Chris是对的,函数
setInterval()
基本上是一个无限循环,您可以为每次迭代设置延迟。那么间隔应该是多少?它是否比使用while(true)的infinte循环更好?@me.nkr间隔为
people.length*1000
。因此,如果你有10个人,它将等待10秒,然后再给第一个人打电话。如果你有5个人,它会等5秒钟再给第一个人打电话。而且它更好,因为
while(true)
运行速度最快。它不会等待settimeout完成它的工作