gpt4 book ai didi

angular - Rxjs 重试延迟功能

转载 作者:太空狗 更新时间:2023-10-29 16:52:00 26 4
gpt4 key购买 nike

我正在尝试将 retrydelay 函数一起使用,我希望函数将在 1000 毫秒延迟后调用,但它不会,这里可能有什么错误?查看控制台输出,时间是 16:22:48。

我预计 16:22:48、16:22:59 ...

canCreate: boolean;
getSomeFunction(): Observable<boolean> {
return new Observable<boolean>(
observer => {
const canCreate = null; // this is just null for now, will some value later
if (canCreate == null) {
observer.error('error');
} else {
observer.next(true);
}
observer.complete();
}
)
}


this.getSomeFunction()
.do((value) => {
this.cCreate = value;
}, (error) => {
console.log(error + new Date().toTimeString());
})
.delay(1000)
.retry(10)
.subscribe(
value => this.cCreate = value,
error => {
this.cCreate = false;
},
() => {}
);
}

控制台结果是:

enter image description here

最佳答案

delay()用于在可观察对象发出的事件之间引入延迟。但是可观察对象从不发出任何事件。它只是立即出错。

您要找的是retryWhen() ,它允许决定在多长时间后重试:

RxJS 5:

  .retryWhen(errors => errors.delay(1000).take(10))

RxJS 6:

import { retryWhen, delay, take } from 'rxjs/operators'
someFunction().pipe(
// ...
retryWhen(errors => errors.pipe(delay(1000), take(10)))
)

这将在 10 次尝试后完成整个 observable。如果你想在 10 次尝试后让整个 observable 出错,retryWhen 回调返回的 observable 必须抛出:

RxJS 5:

  .retryWhen(errors => errors.delay(1000).take(10).concat(Observable.throw()))

RxJS 6:

import { retryWhen, delay, take, concatMap, throwError } from 'rxjs/operators'
someFunction().pipe(
// ...
retryWhen(errors => errors.pipe(delay(1000), take(10), concatMap(throwError)))
)

关于angular - Rxjs 重试延迟功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com