[英]Error getting token on interceptor - Type 'Promise<void | Observable<HttpEvent<any>>>' is not assignable to type 'Observable<HttpEvent<any>>'
[英]Squashing Promise<Observable<HttpEvent<any>>> to Observable<HttpEvent<any>>
給定的 Angular HTTP 攔截器必須實現
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
返回的Observable<HttpEvent<any>>
通常是next.handle(req)
的產物(在 - 也許 - 以某種方式修改請求之后)。
就我而言,我需要設置一些標頭,但要在內部找到哪些標頭,我需要調用一些返回Promises
的方法。 像這樣:
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const req1: Promise<HttpRequest<unknown>> = this.service.getFutureValue().then(value => {
const headers = req.headers.append('X-Custom-Header', value);
return req.clone({headers});
});
...
}
我需要使用req1
鏈接next
:
const x = req1.then(r => next.handle(r));
現在我有一個Promise<Observable<HttpEvent<any>>>
,但我需要以某種方式將其轉換為Observable<HttpEvent<any>>
。
從概念上講,我認為這在某種程度上是有效的,因為Promises
和Observables
都是未來值。
我很確定這是一個簡單的轉換,但我不知道如何。
編輯
這可能有效: from(x).pipe(mergeAll())
。 但我會繼續尋找更具可讀性的東西。
以下情況如何:
return from(this.service.getFutureValue())
.pipe(
mergeMap(x => {
const headers = req.headers.append('X-Custom-Header', x);
return next.handle(req.clone({ headers }));
})
)
或可選:
return from(this.service.getFutureValue())
.pipe(
map(x => {
const headers = req.headers.append('X-Custom-Header', x);
return req.clone({ headers });
}),
mergeMap(next.handle)
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.