Вот как я бы переписал ваш метод, чтобы он работал так, как вы хотите.
getData(id): Observable<any> {
let accessToken$ = of(this.getAccessHeader())
.pipe(
switchMap(accessToken => accessToken ? of(accessToken) : this.getTemptoken()
.pipe(
map(res => res.result.accessToken)
)
)
)
return accessToken$
.pipe(
map(accessToken => {
headers: new HttpHeaders({
'accessToken': accessToken
})
}),
switchMap(httpOptions => this.http.post(url, { id }, httpOptions)),
)
}
accessToken $ отвечает за получение accesToken в случае, если this.getAccessHeader () не дает нам того, что мы хотим. Это происходит внутри switchMap, если у нас есть accessToken, который мы возвращаем (accessToken), иначе мы возвращаем this.getTemptoken ().
Затем мы берем accessToken $, превращаем его в httpOptions и через switchMap мы возвращаем желаемоеthis.http.post. Наконец, тот, кто подпишется на этот метод, получит желаемый http ответ.