Angular 链API http请求,该请求依赖于前一个请求的响应

Angular 链API http请求,该请求依赖于前一个请求的响应,angular,rxjs,angular2-observables,Angular,Rxjs,Angular2 Observables,我正在尝试实现将重复X次的链式http请求,并在最后一个请求没有响应时停止 它应该如何工作 例如,我先打电话 http://example.com/?skip=0 回应如下: { skip=10 }, 比我叫的还多 http://example.com/?skip=10 ... http://example.com/?skip=20 在跳过20时,响应为 { "message" : "You reach the end" } 我需要停下来。但当我得到“跳过”响应时,我必须重复请

我正在尝试实现将重复X次的链式http请求,并在最后一个请求没有响应时停止

它应该如何工作

例如,我先打电话

http://example.com/?skip=0
回应如下:

{
   skip=10
},
比我叫的还多

http://example.com/?skip=10
...
http://example.com/?skip=20
在跳过20时,响应为

{
  "message" : "You reach the end"
}
我需要停下来。但当我得到“跳过”响应时,我必须重复请求,并在我将跳过添加到下一个请求的过程中重复它们


谢谢

如果您没有太多的调用,那么您可以将它们作为单独的方法链接在一起,如下所示。这将允许您更改返回的数据,并在每个阶段对其进行操作:(我正在解释代码,因此,如果它在语法上不100%正确,我深表歉意)

然后用一个

$scope.call1(params);
只有在前一个方法完成后,才会依次调用每个方法。
如果您确实有很多(例如,在一种for循环中),那么您必须将它们添加到排队类型的系统中。

如果您没有太多调用,那么您可以将它们作为单独的方法链接在一起,如下所示。这将允许您更改返回的数据,并在每个阶段对其进行操作:(我正在解释代码,因此,如果它在语法上不100%正确,我深表歉意)

然后用一个

$scope.call1(params);
只有在前一个方法完成后,才会依次调用每个方法。
如果您确实有很多(例如,在一种for循环中),那么您必须将它们添加到排队类型系统。

根据描述,听起来您实际上是想对同一查询进行“分页”,而不是链接多个相关查询。为此,您可以使用
展开

// Start with skip 
Observable.of({skip: 0})
  // Feeds the response resulting stream back into this function
  .expand((response) => {
    // Continue expanding if there is a skip parameter
    if (response.skip >= 0)
      return this.http.get(`http://example.com/?skip=${skip}`);
    // Stop expanding if there is no more data
    else
      return Observable.empty();
  }, 1 /* Limit the number of consecutive queries*/);

根据描述,听起来您实际上是想“分页”同一个查询,而不是链接多个相关查询。为此,您可以使用
展开

// Start with skip 
Observable.of({skip: 0})
  // Feeds the response resulting stream back into this function
  .expand((response) => {
    // Continue expanding if there is a skip parameter
    if (response.skip >= 0)
      return this.http.get(`http://example.com/?skip=${skip}`);
    // Stop expanding if there is no more data
    else
      return Observable.empty();
  }, 1 /* Limit the number of consecutive queries*/);

你试过什么吗?@Maxime肯定我试过了,我现在正在试。。。我正在寻找rx js运营商,但仍然没有发现任何有用的。。比如:takeWhile、timer……如果你想让人们在stackoverflow上帮助你,你应该先发布你尝试过的内容:)因为人们不是来为你做东西的,而是来帮助你的。你能用你迄今为止的尝试更新你的答案吗?你尝试过什么吗?@Maxime确信我尝试过,我现在正在尝试。。。我正在寻找rx js运营商,但仍然没有发现任何有用的。。比如:takeWhile、timer……如果你想让人们在stackoverflow上帮助你,你应该先发布你尝试过的内容:)因为人们不是来为你做东西的,而是来帮助你的。你能用你目前为止尝试过的方法更新你的答案吗?基本上每个迭代一个函数?真糟糕,我不知道我会接到多少电话。这取决于。。。有时数据可以被分到一个块中,我只需要一个调用,但在另一个场景中,我可能需要发出50个请求。问题是如何链接一系列请求,这些请求的执行取决于前一次执行的结果。这正是我提供的代码所做的。后来才提到可能有50个请求。正如我所说,我给出的过程对于少量的调用是完全有效的,基本上每次迭代1个函数?真糟糕,我不知道我会接到多少电话。这取决于。。。有时数据可以被分到一个块中,我只需要一个调用,但在另一个场景中,我可能需要发出50个请求。问题是如何链接一系列请求,这些请求的执行取决于前一次执行的结果。这正是我提供的代码所做的。后来才提到可能有50个请求。正如我所说的,我给出的流程对于少量的调用是完全有效的