Angular7 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');
      });
  }
}

2. 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;
      });
  }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM