Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
angular 6中的多个Api串行调用_Angular_Angular Http - Fatal编程技术网

angular 6中的多个Api串行调用

angular 6中的多个Api串行调用,angular,angular-http,Angular,Angular Http,我有20个API。我的目标是创建一个页面。当页面加载时,我希望调用我的所有API,加载数据并将其存储在许多数组类型变量中。但是如果我在初始化时调用所有API,那么加载页面会花费太多时间。 所以现在我想在页面初始化时一个接一个地自动调用API。你能告诉我如何让这些API一个接一个地连续调用吗。 如果我在每个API末尾使用If子句,即If(respose),那么代码似乎太长。为什么不在实际需要API之前调用它们,例如在加载路由之前使用解析器通过API调用获取数据。但是如果您在开始时确实需要它们,那么

我有20个API。我的目标是创建一个页面。当页面加载时,我希望调用我的所有API,加载数据并将其存储在许多数组类型变量中。但是如果我在初始化时调用所有API,那么加载页面会花费太多时间。 所以现在我想在页面初始化时一个接一个地自动调用API。你能告诉我如何让这些API一个接一个地连续调用吗。
如果我在每个API末尾使用If子句,即If(respose),那么代码似乎太长。

为什么不在实际需要API之前调用它们,例如在加载路由之前使用解析器通过API调用获取数据。但是如果您在开始时确实需要它们,那么您可能需要进行优化,或者进行一次api调用来获取所有数据。而不是20

具有Ng5的解析器示例:


搜索解决方案:

由于您没有任何代码可以显示给我们,我做了一个小小的stackblitz,向您展示如何使用
mergeMap
forkJoin
使用返回
可观察的
的单个函数并使用
mergeMap
forkJoin
concatMap
使用ID数组动态调用函数

请参见,
mergeMap
将执行您拥有的代码并独立跟踪它们,因此函数的返回顺序不一定相同
concatMap
尊重这一点,并尝试按顺序执行它们
forkJoin
会耐心等待,直到它们全部完成,然后返回一个
Observable
,您可以订阅该
Observable
函数,并获得返回函数的所有返回值的数组

最好看一下代码并点击一两次

您可能还想看看
concatAll
,您可以创建一个包含内部可观察对象的可观察对象,并在前一个可观察对象完成后使用
concatAll
自动订阅下一个可观察对象,这对于初学者来说是一个非常好的源代码


希望这有帮助。

我确实解决了自己的问题

of(...urls).pipe(
  concatMap((url: string) => this.getHTTP.getData(url)))
  .subscribe((result) => {
    this.resultArray.push(result);
    console.log('this.resultArray', this.resultArray);
函数concatMap(),允许URL一个接一个地点击。为了更好地理解,我发布了网络中API调用瀑布的屏幕截图


如果需要链接它们,可以使用
flatMap()
像那样链接它们,执行必要的映射并存储结果,然后调用下一个返回
可观察值的函数。如果你能给我们提供一些代码和例子,我们可以给你其他可能的方法的建议。事实上这就是要求。还没有开始编码。我尝试过使用forkJoin()进行探索。但仍不清楚这是否是正确的解决方案。我可以提供的另一个线索是,所有的API都是相同的,只是每个API的请求参数都不同。您是否依赖于
可观察的结果
或您以前执行的函数?比如,您是否使用上一个函数的结果作为下一个函数的参数?如果您还没有开始编码。。我个人认为这看起来像是一种考虑不周的设计选择。也许你可以给我们更多的细节,告诉我们你想通过它获得什么,并取得什么成就。我经历过这一切。但是我关心的是最小化我要呈现到的页面的加载时间。现在加载时间更长了,因为加载时它正在获取所有API。因此,这里的解决方案可能是,我们应该在oninit()之后调用API,这样页面将毫不延迟地加载,并在后台调用API。“这告诉Angular,在显示NewsComponent之前,我们必须等待NewsResolver的resolve()方法返回数据。”它在您提供的链接的描述中。这意味着在加载新页面之前,它将等待数据加载。这意味着需要更多的时间。。这是我的观点。。如果错了,请纠正我