rxjs串联and并联

2021-09-06  本文已影响0人  Bookcyj

MergeMap - 串联请求

import {HttpClient} from '@angular/common/http';import {mergeMap} from 'rxjs';@Component({

  ...

})export classHttpComponentimplementsOnInit{

  constructor(privatehttp: 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');

      });

  }

}

2. ForkJoin - 并联请求

import {HttpClient} from '@angular/common/http';import {forkJoin} from 'rxjs';@Component({

  ...

})export classHttpComponentimplementsOnInit{

  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;

      });

  }

}

上一篇下一篇

猜你喜欢

热点阅读