Javascript 如何连续使用数组中的parms进行api调用
我有一个数组,其中有一些值应该作为参数传递给api调用。 我想用api调用的结果更新数据。我想用数组的每个值每1秒调用一次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
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);
});这是一个非常糟糕的主意,因为while循环迭代不会等待超时。这样,您将每秒安排数千次超时。您可以使用外部间隔,使循环每5秒运行一次(快速但错误的修复),也可以使用交错间隔。请您解释一下,我建议您至少执行一次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完成它的工作