您能帮什么忙?
您可以拥有首先显示请求的属性
我想延迟api第一个api调用而不是第一个api的延迟,现在如果等待两秒钟,它将发出第一个请求,当我在行为主题上调用next时,我希望它发出第一个请求,然后继续重复一个延迟。
执行retryWhen时我无法退订。
我想抛出一个错误,所以我将其捕获到订阅中并对其进行了处理。或找出我们在retryWhen]中的方法
仅当我们从api返回一些数据时才有效,一旦我们进入重试,我便无法从可观察对象中退订。
// Service data = this.subject.pipe( switchMap( // call the api x => this.callAPI((x as any)) .pipe( delay(2000), repeat(Infinity), retryWhen(errors => errors .pipe( delayWhen(error => { console.log(error) if (error.status === 404) { throwError(error) return timer(1000 * 1) } else if (error.status === 500) { return timer(1000 * 5) } // don't retry not retry else { return throwError(error) } } ) ) ) ), ), )
在我的组件中,我有
unsubscribe: Subject<void> = new Subject()
一旦我们进入重试策略,我想知道这一点,所以我会做一些事情。现在,我不知道,可观察到的旧数据仍然有效,因此我无法向用户呈现错误消息。
this.sub = this.service.data.pipe( takeUntil(this.unsubscribe)) .subscribe(res => { console.log(res) }, x => { // as soon as we enter the retry strategy, I want to know that so I do something with. console.log(x) } )
仅当我们从api返回一些数据时才有效,一旦我们进入重试,我便无法从可观察对象中退订。
ngOnDestroy () { console.log('component Destroyed, stop everything') this.unsubscribe.next() this.unsubscribe.complete()
我想在api第一个api调用之后而不是第一个api之后延迟,现在如果等待两秒钟,它将发出第一个请求,当我在我的行为主题上调用next时,我希望它发出第一个请求,然后...] >
您能帮什么忙?
您可以拥有首先显示请求的属性
并且取决于您可以像这样更改延迟毫秒
您可以更改服务逻辑吗?>
isFirstRequest = true; get data() { x => this.callAPI((x as any)).pipe( delay(isFirstRequest ? 0 : 2000), repeat(Infinity), map(response => { isFirstRequest = false; this.subject.next(response); return response; }), retryWhen(errors => (errors .pipe( delayWhen(error => { console.log(error) if (error.status === 404) { throwError(error) return timer(1000 * 1) } else if (error.status === 500) { return timer(1000 * 5) } // don't retry not retry else { return throwError(error) } } ) ) ) ), takeUntil(this.unsubscribe)) ) return this.subject; }
在您的组件中
this.sub = this.service.data.pipe( takeUntil(this.service.unsubscribe)) .subscribe(res => { console.log(res) }, x => { // as soon as we enter the retry strategy, I want to know that so I do something with. console.log(x) } ) ngOnDestroy () { console.log('component Destroyed, stop everything') this.service.unsubscribe.next() this.service.unsubscribe.complete() }
您能帮什么忙?
您可以拥有首先显示请求的属性