将 Promise<Observable<HttpEvent<any>>> 压缩为 Observable<HttpEvent<any>>
Squashing Promise<Observable<HttpEvent<any>>> to Observable<HttpEvent<any>>
给定的 Angular HTTP 拦截器必须实现
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
returned Observable<HttpEvent<any>>
通常是 next.handle(req)
的产物(在 - 也许 - 以某种方式修改请求之后)。
在我的例子中,我需要设置一些 headers,但要找到哪个 headers,我需要在内部调用一些 return 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)
)
给定的 Angular HTTP 拦截器必须实现
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>
returned Observable<HttpEvent<any>>
通常是 next.handle(req)
的产物(在 - 也许 - 以某种方式修改请求之后)。
在我的例子中,我需要设置一些 headers,但要找到哪个 headers,我需要在内部调用一些 return 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)
)