Rxjs 在http请求结束时执行额外的可观察/承诺

Rxjs 在http请求结束时执行额外的可观察/承诺,rxjs,angular-http-interceptors,rxjs6,Rxjs,Angular Http Interceptors,Rxjs6,我有一个拦截器,当请求从服务器返回时,我需要链接/执行承诺/可观察。在rxjs 6中如何实现这一点 intercept(): Observable<HttpEvent<any>> { return next.handle(request)[DO-SOMETHING] } intercept():可观察{ 返回next.handle(请求)[DO-SOMETHING] } 如果需要修改http事件: return next.handle(request).pipe

我有一个拦截器,当请求从服务器返回时,我需要链接/执行承诺/可观察。在rxjs 6中如何实现这一点

intercept(): Observable<HttpEvent<any>> {
    return next.handle(request)[DO-SOMETHING]
}
intercept():可观察{
返回next.handle(请求)[DO-SOMETHING]
}

如果需要修改http事件:

return next.handle(request).pipe(
    mergeMap(request => yourPromiseOrObservable));
return next.handle(request).pipe(
    tap(request => yourPromise.then(_ => ;)));
mergeMap
做什么

将每个源值投影到一个可观察对象,该可观察对象合并到输出可观察对象中

如果不需要修改http事件:

return next.handle(request).pipe(
    mergeMap(request => yourPromiseOrObservable));
return next.handle(request).pipe(
    tap(request => yourPromise.then(_ => ;)));
点击
tap
做什么

对可观察到的源上的每个发射执行副作用,但返回 与源相同的可观察到的物体

或者,如果您需要等待承诺但不修改请求:

return next.handle(request).pipe(
    delayWhen(request => from(yourPromise)));
当做什么时,
会延迟

将可观测源的项目发射延迟一个给定的时间跨度,该时间跨度由另一个可观测源的发射确定


如果需要修改http事件:

return next.handle(request).pipe(
    mergeMap(request => yourPromiseOrObservable));
return next.handle(request).pipe(
    tap(request => yourPromise.then(_ => ;)));
mergeMap
做什么

将每个源值投影到一个可观察对象,该可观察对象合并到输出可观察对象中

如果不需要修改http事件:

return next.handle(request).pipe(
    mergeMap(request => yourPromiseOrObservable));
return next.handle(request).pipe(
    tap(request => yourPromise.then(_ => ;)));
点击
tap
做什么

对可观察到的源上的每个发射执行副作用,但返回 与源相同的可观察到的物体

或者,如果您需要等待承诺但不修改请求:

return next.handle(request).pipe(
    delayWhen(request => from(yourPromise)));
做什么时,
会延迟

将可观测源的项目发射延迟一个给定的时间跨度,该时间跨度由另一个可观测源的发射确定


我的承诺回报了我的承诺。编译器对此给出了一个错误,因为函数要求可观察:(我明白了,你不需要内部可观察到的结果?然后使用
tap
。我已经将其添加到我的帖子中。是的,但我需要等待可观察到的结果/承诺,然后代码才能继续。tap只是对其执行操作,而不必等待它……好的,我们就快到了:)现在在delayWhen中,我只需要在“request instanceof HttpResponse”的情况下执行承诺。我是否应该在delayWhen中执行if-else检查并返回空()如果不需要做任何事情?或者有更聪明的方法吗?我认为应该这样做。使用
filter
操作符可以实现这一点,但这会使读取代码变得复杂。使用三元操作符“?”可以从(yourPromise):empty()执行一行程序…
请求HttpResponse的实例
My promise返回promise。编译器在这方面给出了一个错误,因为函数期望可观察到:(我明白了,你不需要内部可观察到的结果?然后使用
tap
。我已经将其添加到我的帖子中。是的,但我需要等待可观察到的结果/承诺,然后代码才能继续。tap只是对其执行操作,而不必等待它……好的,我们就快到了:)现在在delayWhen中,我只需要在“request instanceof HttpResponse”的情况下执行承诺。我是否应该在delayWhen中执行if-else检查并返回空()如果不需要做任何事情?或者有更聪明的方法吗?我认为应该这样做。有一些方法使用
过滤器
操作符,但这会使读取代码变得复杂。使用三元操作符“?”你可以从(你的承诺):empty()执行一行程序…
请求HttpResponse的实例