代码之家  ›  专栏  ›  技术社区  ›  Nomura Nori

许诺仅当使用了4个以上的承诺时,才获得“Access Control Allow Origin”

  •  0
  • Nomura Nori  · 技术社区  · 7 年前

    你好吗 我发现了一些奇怪的问题。 我将从' https://randomuser.me/api/ ' 所以我实现了如下代码。 然后它告诉我 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个观察值。 请帮帮我。非常感谢。

    1 回复  |  直到 5 年前
        1
  •  3
  •   jfriend00    7 年前

    将我的评论变成回答:

    503错误状态可能表示服务器上发生了其他错误,被错误报告为CORS错误。也许您对服务器的请求太多太快,因此它会在选项请求上报告一个错误,因此会报告为CORS错误,但实际上这是由于请求太快造成的。

    503状态代码的一般原因是“服务不可用”。因此,这也可能是由于某些基础结构保护目标服务器不受太多请求的影响。

    由于我无法修改api,如何获取20个人的信息?我必须使用计时器吗?还是递归函数?这两种方法似乎都不是很好的解决方案。如何在前端解决此问题?

    阅读API上的文档或访问支持论坛,了解它实现了什么样的速率限制。如果你找不到任何文档或支持信息,那么你必须通过测试找出答案,然后将你的请求率限制在这一水平以下。


    使现代化

    从文档中可以看出,您可以通过一个API调用获取20个用户。

    看见 https://randomuser.me/documentation#multiple 有关详细信息。

    示例:

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