Angular2-获取400禁用我的observable.subscribe with interval
我有一个应用程序,其中我有函数Angular2-获取400禁用我的observable.subscribe with interval,angular,typescript,angular2-services,Angular,Typescript,Angular2 Services,我有一个应用程序,其中我有函数get(),它返回我Observable.interval(1000)和http get 在app.component中,我订阅了这个可观察对象,并在屏幕上打印了GET的一些值 在get响应返回400(服务器不时发送404)之前,一切正常。但当我收到400,我的订阅停止工作。 屏幕仅显示最后一个值并停止“刷新” 下面是一些代码: getAct(symbol:string): Observable<Act> { return Observable .
get()
,它返回我Observable.interval(1000)
和http get
在app.component中,我订阅了这个可观察对象,并在屏幕上打印了GET的一些值
在get响应返回400(服务器不时发送404)之前,一切正常。但当我收到400,我的订阅停止工作。
屏幕仅显示最后一个值并停止“刷新”
下面是一些代码:
getAct(symbol:string): Observable<Act> {
return Observable
.interval(1000)
.flatMap(() => {
return this.http.get(url)
.map((res: Response):Act => (res.json()))
.catch(err => {
return Observable.throw(err);
});
});
因此,如果我在console中运行我的应用程序,我有:
因此,程序运行良好-29获得成功,但当它接收到400个停止时,没有更多的“ok”
问题在哪里?是我的getAct()错了,还是订阅时编写了一些不好的代码
请帮帮我,我试图修复这个,但我做不到。我可以做这样的东西,但我认为这是一个非常糟糕的解决方案
get(){
this.actSub = this.actService
.getAct(this.symbol)
.subscribe(
act => {
console.log("ok");
this.act = act;
}
},
err => {
console.warn(err);
this.get();
},
()=>console.log("Done")
);
}
有几个RxJS操作符可以处理错误 最简单的方法是使用:
返回此.http.get(url)
.重试()
.map(res=>res.json());
这是一种积极的策略,因为一旦请求失败,它将重新订阅原始的可观察内容(This.http.get(…)
)。你最终可能会狠狠地打击服务器
您可能想改用,这会让您在重试前稍微延迟,例如:
返回此.http.get(url)
.retryWhen(errors=>errors.delay(2000))//重试前延迟2秒
.map(res=>res.json());
这是正常行为。可观察对象在完成或出错后停止发送值(如4**HTTP响应)。
get(){
this.actSub = this.actService
.getAct(this.symbol)
.subscribe(
act => {
console.log("ok");
this.act = act;
}
},
err => {
console.warn(err);
this.get();
},
()=>console.log("Done")
);
}