【问题标题】:Convert recursion to iteration in service calls in Angular在 Angular 的服务调用中将递归转换为迭代
【发布时间】:2021-03-10 17:01:38
【问题描述】:

我在 Angular 服务中有这种 HTTP 请求功能:

doRequest() {
  return this.http.get<any>("/DoStuffController/DoStuff");
}

它是从 Angular 组件调用的。问题是,根据返回值,组件可能需要继续调用它。返回值告诉 Angular 是继续调用还是停止。像这样的:

doRequest() {
  this.service.doRequest().subscribe(data => {
    if (data.continue) {
      doRequest();
    }
  );
}

可能有数百个连续调用。我担心这可能会导致文字堆栈溢出(双关语)。我想将此递归转换为迭代,就像这样(可能行不通):

doRequest() {
  var continue: boolean = true;
  do {
    this.service.doRequest().subscribe(data =>
      continue = data.continue;
    );
  } while (continue);
}

这种事情可能吗?

【问题讨论】:

  • 我认为 JavaScript 自 ES2015 以来启用了尾调用优化,因此您可能无需担心使用递归而不是迭代,我已更正

标签: angular recursion iteration


【解决方案1】:

这是可能的,但是为什么您在 API 响应继续为 false 之前请求某些内容,我认为您应该更改 API 的逻辑,而不是在前端这样做

【讨论】:

  • 这是因为 Angular 必须依次响应每个调用,以便向用户显示逻辑的进展情况。
猜你喜欢
  • 2016-01-26
  • 2017-03-05
  • 2021-03-11
  • 1970-01-01
  • 2019-10-10
  • 2016-06-29
相关资源
最近更新 更多