簡體   English   中英

在第一個結束后在后台進行第二個 API 調用

[英]Make 2nd API call in the background after 1st one ends in an observable

public LoggedInUser$:Observable<any> = new Observable(observer => {
        this._loggedInUser = observer;
        this.api$.make_api_call('getapplication').subscribe(d => {
           // do Something            
        });
    });

我如何鎖定另一個 API 調用這個異步的或至少在getapplication響應后啟動的可觀察對象? 我嘗試在內部添加另一個 API 調用,例如 -

        let params = {
            'all_applications': true
        };
        this.api$.make_api_call('getallapplications', params).subscribe(d => {
            // do Something           
        });

但這並沒有解決我的目的,而且這兩個電話幾乎是同時進行的。

這是兩個獨立的調用,彼此不依賴。 想法是為用戶引入單獨的應用程序數據,一旦完成,運行異步調用(或者可能在后台調用)以獲取 rest 的應用程序並將其緩存在 Redis 中。

要求是為客戶引入單個應用程序數據。 同時引入所有其他應用程序數據,以便當用戶在它們之間切換時,用戶體驗不會受到影響。

你能試試concatMap嗎? ConcatMap 幫助您按順序處理請求,即您首先獲得響應的請求,您的下一個調用將被執行。

 import { of } from 'rxjs'; import { ajax } from 'rxjs/ajax'; import { map, concatMap } from 'rxjs/operators'; const users$ = ajax.getJSON('https://api.github.com/users'); users$.pipe( concatMap(users => { const userId = 1; console.log('concat users', users) return ajax.getJSON(`https://api.github.com/users/${userId}`) }) ).subscribe(user => console.log('user', user));

這是 stackblitz URL

concatMap RXJS 示例

在你的情況下,試試這個

 this.api$.make_api_call('getapplication').pipe( tap(response => console.log('First API response'), concatMap(response => { let params = { 'all_applications': true }; return this.api$.make_api_call('getallapplications', params) }) ).subscribe(response => console.log('2nd API Response', response));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM