如何在 Angular 6 中调用多个 API 并订阅?

2024-03-19

在我的应用程序中,调用所有POST请求我已经使用了service.

当我得到一个specific code (例如:401)我从服务器调用 API 来获取新令牌。

在收到另一个令牌之前,如果有任何其他 API 调用,我会将所有这些请求存储在一个数组中。可能是n要求。现在假设在调用 newToken API 时有 3 个 API 调用。

一旦我获得了一个新的令牌,我就必须在所有后续的 API 中传递它。现在我必须执行所有待处理的 API 请求并向各自的调用提供数据。

代码示例:

api.service.ts

POST(URL , param){
   return new Observable<any>(observer => {

  let headers = new HttpHeaders({
    'Content-Type': 'Content-Type': 'application/json'
  });

  let options = {
    headers: headers
  };

  this.http.post(URL, param, options)
        .subscribe(data => {
          var apiRes: any = data;                                       
          this.inValidSession();
          observer.next();
          observer.complete();              
  }
  ......

  //  For execute pending request I have set this 

  for (let i = 0; i < this.queue.length; i++) {                          
        this.REPOST(this.queue[i].param, this.queue[i].url).subscribe((queueResponse) => {             
          observer.next(queueResponse);
          observer.complete();
          this.queue.shift();                      
       });
   }
}

用户组件.ts

ngOnInit(){
    this.getUserData();        
    this.getProductData();
}

getUserData(){
   this.apiService.post({},'/apiName').subscribe((response) => {
       console.log(response);
   })
}

getProductData(){
   this.apiService.post({},'/apiName2').subscribe((response) => {
       console.log(response);
   })
}

问题是,当我执行所有待处理的 API 时,我会在控制台中获取数据。但不是subscribe从服务文件到相应的.ts文件的功能。

注意:我仅在一个函数中获取订阅数据,而不是在每个函数中获取订阅数据。换句话说,我得到了两个 API resgetProductData()功能。我不知道为什么。

如果有人有解决方案,请帮助我。


您可以使用

forkJoin()

同时处理多个呼叫,您可以同时呼叫多个request订阅后您将获得array的响应。

eg

    forkJoin(Service1.call1, 
     Service2.call2)
    .subscribe(([call1Response, call2Response]) => {

其中 service1 和 service2 是具有函数 ccall1 和 call2 的服务,它们具有return type Observable

你可以找到更多Here https://www.learnrxjs.io/operators/combination/forkjoin.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Angular 6 中调用多个 API 并订阅? 的相关文章

随机推荐

  • 在 Entity Framework Core 中使用两列的一对多关系

    在我的项目中我有一张桌子Translation可以有任何模型的翻译 为了实现这一点 该表有两个字段 Model and ModelId The Model属性保存一个整数 指示模型的类型和ModelId有这个模型的id 因此 例如 Prod
  • 删除ggplot2中geom_boxplot中的边框

    这看起来应该相对简单 但我找不到允许我这样做的论点 并且我已经在 Google 和 Stack 中搜索了答案 示例代码 library ggplot2 library plotly dat lt data frame cond factor
  • Dagger 2.15:AppComponent - 无法处理此接口

    我无法构建我的应用程序 并出现以下错误 Task app kaptDebugKotlin debug AppComponent java 7 error ComponentProcessor MiscError dagger interna
  • 使用转换器从 System.Windows.SystemParameters.PrimaryScreenWidth 进行 WPF 绑定

    我试图将 System Windows SystemParameters PrimaryScreenWidth 绑定到 ColumnDefinition 的 来自 Grid 内 宽度属性 并使用转换器将 PrimaryScreenWidth
  • webpack 包中的导出功能

    我正在使用需要回调的谷歌地图 API 如何从 webpack 包导出回调以供外部脚本 例如 Google Maps API 使用 HTML X d 输出键 div div map js var require jquery function
  • Eclipse:“系统”无法解析

    首先我安装了java 7 0 update 25 然后安装了eclipse 后来根据要求 我卸载了这个java版本并安装了早期版本5 0 现在 在每个 Eclipse 程序中 都会显示 System 一词的错误 解决办法是将java exe
  • UIPageControl - 如何使背景透明?

    我在用UIPageControl并试图使背景透明 UIPageControl pageControl UIPageControl appearance pageControl pageIndicatorTintColor UIColor l
  • CSS 在打印时指定整页宽度?

    我有一个 html 页面 由于打印特定的样式 打印得很好 除了一件事 它不使用页面的整个宽度 换句话说 我希望缩放页面以填充页面 是否可以使用 css 样式获得该结果 实际上你可以 用 pagecss 规则 尽管它可以在浏览器实现之间进行一
  • itextsharp:如果未设置行底部边框,如何显示具有属性 HeaderRows=1 的表格的底线?

    我使用 itextsharp 的最新版本 我使用属性 HeaderRows 1 这样如果有分页符 标题行将再次出现在下一页中 然后我们的内容行具有边框样式 没有底线 如下所示 PdfPCell cell1 null cell1 new Pd
  • 在 Cython 中使用半精度 NumPy 浮点数

    我正在尝试从一些 Cython 代码将 float16 数据发送到 Nvidia P100 卡 当我使用 float32 时 我可以在 Cython 中定义我的类型 如下所示 DTYPE np float32 ctypedef np flo
  • 将 ES7 静态 propTypes 与 React-Native 结合使用

    当我使用 React Native 默认打包程序启动项目时 出现以下错误 Unexpected token在这一行 static propTypes 我查看了 GitHub 上的 React Native issues 但没有找到解决方案
  • mongodb+srv URI 不能有端口号

    我有 注意 用户名和密码是组成的 const CONNECTION URL mongodb srv smith bob email protected cdn cgi l email protection T llyHo cluster0
  • 如何获取 TensorFlow 中估算器的默认会话?

    我创建了一个估算器并使用估算器将其导出到 SavedModel 文件export savedmodel 功能 出于可重复性的原因 我希望能够重新创建估算器 加载 SavedModel 文件中的变量 然后调用evaluate 并得到相同的结果
  • 在启用 SuperTab 的情况下,如何使用 Tab 键在 vim 中缩进?

    我刚刚在 vim 中启用了 SuperTab 如果我尝试缩进空行 SuperTab 会尝试插入字符串 我想 我想要的是让 SuperTab 提供补全功能only如果光标左侧有非空白 我不想使用 Ctrl V 或 Ctrl Q 或其他任何东西
  • 测量 x86-64 中的 TLB 未命中处理成本

    我想估计运行 Linux 的 x86 64 Intel Nehalem 计算机上由于 TLB 未命中而导致的性能开销 我希望通过使用一些性能计数器来获得这个估计 有人知道估计这个的最佳方法是什么吗 谢谢 阿尔卡 如果您可以访问基于 West
  • 我可以限制 php 脚本的最大 CPU 使用率吗?

    我有一些使用大量 cpu 的脚本 是否可以限制允许进程使用的 cpu 量 顺便说一句 我正在 CentOs 5 5 上运行 我帮助一位 PHP 编码员创建了解决类似问题的 PHP 脚本 这些是长时间运行的 PHP 脚本 会产生大量负载 由于
  • 图片可以有多个标签吗?

    例如 当我将新图像推送到存储库时 我希望它有两个标签0 2 and latest 这将允许始终通过使用拉取最新的图像版本latest标签和特定版本使用0 2例如标签 用docker可以吗 有什么解决方法吗 我看到的唯一解决方案是进行两次单独
  • React.js 中的悬停按钮

    我想问如何制作一个按钮 但是当鼠标位于按钮上 悬停 时 新按钮显示在前一个按钮上方 并且它在react js中 thx 这是我的代码的方式 var Category React createClass displayName Categor
  • Apple 关联文件在开发中获取,但在 TestFlight 和 App Store 中未获取

    通用链接在开发中工作得很好 但是一旦我对应用程序进行签名并将其部署到 TestFlight 和 App Store 似乎未获取 apple app site association 因此该应用程序未注册以打开通用链接 1 well know
  • 如何在 Angular 6 中调用多个 API 并订阅?

    在我的应用程序中 调用所有POST请求我已经使用了service 当我得到一个specific code 例如 401 我从服务器调用 API 来获取新令牌 在收到另一个令牌之前 如果有任何其他 API 调用 我会将所有这些请求存储在一个数