我正在学习使用retryWhen
运算符,但我遇到了在retryWhen
运算符执行时或之前收到错误的问题。这是我的第一个代码:
ngOnInit() {
this.subs1 = this.rateService.getClpBtc()
.subscribe(prices => {
this.clpbtc = prices.ticker.min_ask[0];
}, errors => {
if (errors) {
this.surbtcErrors = errors;
console.log(`The name is: ${errors}`);
}
else {
this.surbtcErrors = null;
}
});
}
这工作正常,我可以在名为surbtcErrors
的属性中获取错误。但后来我在.retryWhen(errors => errors.delay(5000))
运算符之前添加了subscribe
,我意识到即使出现错误,我的属性也是空的,因为我认为订阅运算符没有执行(我不确定,我正在学习。
所以,经过一些研究我尝试了这个:
ngOnInit() {
this.subs1 = this.rateService.getClpBtc().retryWhen(function(errors) {
if (errors) {
console.log(`Error: ${errors}`);
errors.delay(5000);
return this.surbtcErrors = errors;
} else {
console.log("SIN ERROR")
return this.surbtcErrors = null;
}
})
.subscribe(prices => {
this.clpbtc = prices.ticker.min_ask[0];
}, errors => {
if (errors) {
this.surbtcErrors = errors;
console.log(`The name is: ${errors}`);
} else {
this.surbtcErrors = null;
}
});
}
使用此代码我得到Error: [Object object]
。所以,我的问题是如何才能得到错误,以便我可以在surbtcErrors
属性中使用它?
答案 0 :(得分:2)
传递给errors
函数的retryWhen
参数是一个可观察到的错误流。此函数应返回一个可观察的流,指示何时重试。示例errors => errors.delay(500)
基本上表示只是在发生任何错误后重试500毫秒。
错误到达时,您可以使用https://www.rabbitmq.com/ha.html运行副作用。在您的情况下,副作用是将错误存储为组件的变量。
为此,我们只需在.do(...)
之前插入.delay
子句。像这样:
this.rateService.getClpBtc()
.retryWhen(errors => errors
.do(error => this.subtcErrors = error)
.delay(500));