angular 6中的多个Api串行调用
我有20个API。我的目标是创建一个页面。当页面加载时,我希望调用我的所有API,加载数据并将其存储在许多数组类型变量中。但是如果我在初始化时调用所有API,那么加载页面会花费太多时间。 所以现在我想在页面初始化时一个接一个地自动调用API。你能告诉我如何让这些API一个接一个地连续调用吗。angular 6中的多个Api串行调用,angular,angular-http,Angular,Angular Http,我有20个API。我的目标是创建一个页面。当页面加载时,我希望调用我的所有API,加载数据并将其存储在许多数组类型变量中。但是如果我在初始化时调用所有API,那么加载页面会花费太多时间。 所以现在我想在页面初始化时一个接一个地自动调用API。你能告诉我如何让这些API一个接一个地连续调用吗。 如果我在每个API末尾使用If子句,即If(respose),那么代码似乎太长。为什么不在实际需要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()方法返回数据。”它在您提供的链接的描述中。这意味着在加载新页面之前,它将等待数据加载。这意味着需要更多的时间。。这是我的观点。。如果错了,请纠正我