Promise.all 仅在使用超过 4 个承诺时获得 'Access-Control-Allow-Origin'

Promise.all get 'Access-Control-Allow-Origin' only when more than 4 promises used

你好吗。 我发现了一些奇怪的问题。 我将从“https://randomuser.me/api/”中获取 20 个人的随机信息 所以我实现了如下代码。 然后它显示 No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 503. 错误。

    for (let i = 0; i < 20; i++) {
      const promise = this.http.get<any>('https://randomuser.me/api/').toPromise();
      promises.push(promise);
    }
    Promise.all(promises).then(function(values) {
      console.log(values);
    });

奇怪的是,如果我得到 4 人以下的数据,它就不会发生。所以下面的例子可以正常工作。

    for (let i = 0; i < 4; i++) {
      const promise = this.http.get<any>('https://randomuser.me/api/').toPromise();
      promises.push(promise);
    }

很奇怪,我尝试使用 Rxjs,使用 forkjoin 运算符,但结果是一样的,它也只允许 4 个 observables。 请帮我。谢谢。

将我的评论变成答案:

503 错误状态可能表示服务器上发生了其他事情,被错误地报告为 CORS 错误。也许您太快地向服务器发出了太多请求,并且由于这个原因它在 OPTIONS 请求上报告了错误,因此它被报告为 CORS 错误,但实际上它是由发出请求太快引起的。

503 状态代码的一般原因是 "service unavailable"。因此,这也可能是由某些保护目标服务器免受过多请求的基础架构造成的。

As I can't modify api, how can I get 20 persons info? Do I have to use timer? or Recursive function? Both of them seems to be not so good solution. How can I solve this on Frontend side?

阅读 API 上的文档或访问支持论坛,了解它实施的速率限制类型。如果找不到任何文档或支持信息,则必须通过测试来解决,然后将请求率限制在该值以下。


更新

文档显示您可以通过一次 API 调用获取 20 个用户。

详情见https://randomuser.me/documentation#multiple

示例:

https://randomuser.me/api/?results=20