在我的Angular项目中,我正在进行HttpClient调用,响应后,我需要检查它的主体并执行另一个HttpClient调用,这取决于第一个响应。另外,我还需要延迟第二个HttpClient调用的执行时间。
我可以使用switchMap
运算符来做到这一点,但我想知道如何以正确的方式延迟第二个http通话。
这是一个非常简单的示例:
export class AppComponent {
ngOnInit() {
this.execute().subscribe(r => console.log(r))
}
execute(): Observable<string> {
return this.http1Call().pipe(switchMap((r) => {
// Checking if 2d http call must be executed or not
if (r === '1st call') {
console.log('---Invalid 1st call, executing 2d')
// TODO: Is that correct way to execute http2Call with delay ???
return of({}).pipe(delay(3000), switchMap(() => this.http2Call()))
}
return of(r);
}));
}
http1Call(): Observable<string> {
return of('1st call').pipe(delay(1000));
}
http2Call(): Observable<string> {
console.log('------Inside http2Call')
return of('--------2d call response').pipe(delay(3000));
}
}
答案 0 :(得分:2)
基本上您可以拥有,您可以简化(或更明显)延迟的部分:
return timer(3000).pipe(switchMapTo(this.http2Call()))
具有一个参数的 timer()
将在延迟后仅发出一次。您可能还使用concatMap/concatMapTo
而不是switchMap/switchMapTo
,因为在这种情况下,您将永远不会切换任何内容(timer
仅发出一次然后完成)。