Angular 2 http - 有条件地发送请求

标签 angular angular-http

你好,我需要处理 HTTP。我需要使用条件发送请求,这里是示例:

我需要发送POST/api/files - 但发送是有条件的服务器API: GET/api/condition - 返回 true 或 false。如果返回true,则可以调用/api/files,如果返回false,我需要调用POST/api/enable。

1.获取/api/条件

1a。返回 true -> 2。

1 b.返回 false -> 3。

2. POST/api/文件

3. POST/api/enable -> 1.

最简单的方法如下:

load(){
 http.get(/api/condition).subscribe(response => {
   if(response == true)
      http.post(/api/files).subscribe()
    else http.post(/api/enable).subscribe(x => this.load())
  })
 }

但这不是明确的解决方案。有什么方法可以创建这个吗?谢谢

最佳答案

好吧,你已经让代码正常工作了,你唯一能做的就是模块化整个 block 并将其拆分为适当的函数。

检查条件请求

fetchCondition(): Observable<boolean> {
   return http.get(/api/files).map((response: boolean) => response);
}

获取文件

fetchFiles(): Observable<YourFile[]> {
   return http.post(/api/files).map((response: YourFile[]) => response);
}

启用文件提取

enable(): Observable<any> {
   http.post(/api/enable).map((response: any) => response);
}

逻辑 - 将各个部分组合在一起

load(){
   this.fetchCondition().subscribe(
       condition => {
          if(condition) {
             this.fetchFiles().subscribe(
                files => this.doSomethingWithFiles(files),
                err => { /* handle */ }
             );
          } else {
             this.enable().subscribe(resp => this.load());
          }
       },
       err => { /* handle */ }
   );
}

请注意,您可能会进入无限循环! 如果您的服务器以某种方式无法启用您在函数开始时检查的条件,则运行加载函数可能会让您陷入无限循环。 我会推荐某种计数器/调度程序来处理这种漏洞。当然,这完全取决于应用程序的上下文和复杂性。

关于Angular 2 http - 有条件地发送请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772970/

相关文章:

angular - 处理将 API 对象映射到 UI 模型对象的模式

angular - 如何将 Material Components Web 与 Angular CLI 项目集成?

javascript - Angular 2/4 从循环索引分配模型值

Angular 6 - 在不相关的组件之间共享一个对象

javascript - RXjs 在 Heroku 上部署时出现问题

javascript - $http.put 可以将数据写入 JSON 文件吗

angular - Angular 中递归对象(通过调用静态方法链接)中的循环依赖

javascript - Angular 2 - 无法读取未定义的属性 '...'

javascript - 自定义 header 添加到 Access-Control-Request-Headers

javascript - 无法在 AngularJS 中的请求中指定 header