HttpClient处理多个请求(转)

  1. MergeMap - 串联请求
    后一个请求需要前一个请求的返回结果时,需要使用串联请求。

可以使用MergeMap实现, 优势是减少嵌套,优化代码;

代码如下:

import {HttpClient} from '@angular/common/http';
import {mergeMap} from 'rxjs';
 
@Component({
   ...
})
export class HttpComponent implements OnInit {
 
 
  constructor(private http: HttpClient) { }
 
 
  ngOnInit() {
    // 串联请求, 前面请求会影响后面的请求,前面请求未请求到,后面请求中断;
    const httpThis = this;
    httpThis.http.get('/api/token').
      pipe(
      map(token => {
        return token;
      }),
      mergeMap((tokenRes: any) => { // tokenRes接收的是token数据
        return httpThis.http.get(`/api/user?token=${tokenRes}`)
          .pipe((user) => {
            return user;
          });
      }),
      mergeMap((userRes: any) => { // userRes接收的是user数据
        return httpThis.http.get(`api/data?user=${userRes}`)
          .pipe((data) => {
            return data;
          });
      }))
      .subscribe((resp) => { // resp接收的是data数据
        console.log('最终结果resp是最后一个mergeMap的data');
      });
  }
}
  1. ForkJoin - 并联请求
    多个请求,无所谓先后顺序,等到全部请求完成后执行一定的操作时,需要使用并联请求;

可以使用ForkJoin,和promise方法效果一样,好处是:可以减少嵌套,优化代码;

代码如下:

import {HttpClient} from '@angular/common/http';
import {forkJoin} from 'rxjs';
 
@Component({
   ...
})
 
 
export class HttpComponent implements OnInit {
 
 
  constructor(private http: HttpClient) { }
 
 
  ngOnInit() {
      
    // 并联请求
    const post1 = this.requestData1();
    const post2 = this.requestData2();
    forkJoin([post1, post2])
      .subscribe((data: any) => {
        const postResult1 = data[0]; // '/api/post1的返回结果'
        const postResult2 = data[1]; // '/api/post2的返回结果'
      });
  }
 
 
  // 并联请求1
  requestData1() {
    return this.http.get('/api/post1')
      .pipe((data) => {
        return data;
      });
  }
 
 
  // 并联请求2
  requestData2() {
    return this.http.get('/api/post2')
      .pipe((data) => {
        return data;
      });
  }
}

转自
https://www.cnblogs.com/xiaxianfei/p/13156857.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容