【问题标题】:Make Recursive calls using http.get() in Angular 2/4在 Angular 2/4 中使用 http.get() 进行递归调用
【发布时间】:2018-05-15 15:15:55
【问题描述】:

我有一个场景,初始请求将发送一个 url 路径,后续请求应该使用该路径作为使用 get 服务请求命中的 url。 (这部分完成)

现在实际问题开始了,这里的问题是 2nd 请求不会直接给出输出,而是将状态发送为 QUEUE em> 直到响应被完全处理。我所要做的就是再次等待/点击 url,直到 QUEUE 状态更改为 OK 状态(此处为实际响应)。

第二次请求的代码:

getOriginalData(url:any){

  const proxyRequest=this._getRequest(url)

  return proxyRequest
  .expand(response => {
      if (response.uuid==null) {
        this._getRequest(url);
      } else {
        Rx.Observable.empty();
      }
    return Observable.of(response);
  });

private _getRequest(url:any){
  return this._http.get(url)
}

我一直在关注这个实现以实现我的目标:Angular - Correctly using RXJS expand operator to make recursive http calls。

使用这个实现会导致

ERROR RangeError: Maximum call stack size exceeded

但由于某种原因,它没有按预期工作。如何以标准方式进行递归调用,以免网络泛滥。

【问题讨论】:

    标签: angular angular2-services angular4-httpclient


    【解决方案1】:

    从未使用过扩展运算符,但据我了解,您需要返回 Observable.empty 以停止递归请求

    【讨论】:

    • 但是由于堆栈错误导致请求失败
    • 你还没有返回 observable.empty 所以扩展没有停止
    • 我已将其更改如下getOriginalData(url:any){ const proxyRequest=this._getRequest(url) return proxyRequest .expand(response => { if (response.uuid==null) { return this._getRequest(url); } else { return Rx.Observable.empty(); } }); 但它会永远持续下去而没有得到最终输出
    • 因此尝试调试以查看返回的响应。也许 response.uuid 总是为 null 并且函数继续调用 http 请求
    猜你喜欢
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 1970-01-01
    相关资源
    最近更新 更多