我有这个代码,通过谷歌API返回一个网站的速度得分。由于有时值是不正确的,我在一个帖子上读到,这是一个很好的做法,使请求几次,然后使得分的中位数。如何同时发出多个Api请求?
我试过这样做
function medianSpeed() {
let values = [];
function call() {
return fetch(url)
.then((response) => response.json())
.then((json) => {
const speed = +json.lighthouseResult.categories.performance.score;
values.push(speed);
});
}
const promise1 = call(),
promise2 = call(),
promise3 = call();
const promises = [promise1, promise2, promise3];
Promise.allSettled(promises).then(() => {
return values;
});
}
现在的问题是如果我调用medianSpeed()
代码不会等待Promise.allSettled
的结束它直接返回undefined
InsidemedianSpeed()
add return before call toPromise.allSettled()
:
return Promise.allSettled(promises).then(() => {
return values;
});
,当调用medianSpeed()
时,计算.then()
回调的中值:
medianSpeed().then(values=>calcMedian(values))
您的问题是medianSpeed
没有返回承诺,所以没有什么可等待的。
如果你执行了return Promise.allSettled...
,然后在调用函数:medianSpeed().then(values => {})
之后执行了then
块,那么你将获得返回的值。
我假设url
变量来自其他地方?