0
Когда я расширяю Http
класс для добавления тайм-аута сеттер с помощью rxjs, оператор timeout
не работает, когда я импортировать его как этот import 'rxjs/add/operator/timeout'
оператор Angular2 Тайм-аут не работает на расширенной Http
Он работает только тогда, когда я загружаю вся rxjs библиотеки
import {Component, NgModule} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'
import {Observable} from 'rxjs/Observable'
import 'rxjs/add/operator/timeout'
import {HttpModule, RequestOptions, XHRBackend} from "@angular/http";
import {WpHttp} from "../wpHttp";
@Component({
selector: 'my-app',
template: `
<div>
<h2>Hello {{name}}</h2>
</div>
`,
})
export class App {
name:string;
constructor(private wpHttp: WpHttp) {
//this.name = 'Angular2'
}
ngOnInit(){
this.wpHttp.get("../test.json").subscribe((res)=>{
this.name = res.title;
});
}
}
@NgModule({
imports: [ BrowserModule, HttpModule ],
declarations: [ App ],
providers: [
{
provide: WpHttp,
useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) =>
new WpHttp(backend, defaultOptions),
deps: [XHRBackend, RequestOptions]
}
],
bootstrap: [ App ]
})
export class AppModule {}
Расширенный Http
import {Injectable} from '@angular/core';
import {Http, RequestOptions, RequestOptionsArgs, ConnectionBackend} from '@angular/http';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class WpHttp extends Http {
constructor(backend: ConnectionBackend,
defaultOptions: RequestOptions) {
super(backend, defaultOptions);
}
get(url): Observable<any> {
console.log("started")
return super.get(url)
.timeout("500", new Error('delay exceeded'))
.catch((err) => {
return Observable.throw(err);
})
.finally(() => {
console.log("finished")
});
}
}
Не похоже, что проблема связана с тем, что 'тайм-аут()' используется в классе, который расширяет 'Http', как указано в название. –
@ GünterZöchbauer работает с прокомментированным кодом в plnkr, но только когда я использовал его в расширенном http, я получил ошибку –
И когда вы используете timout с помощью 'http.get()' непосредственно (без пользовательского 'WpHttp',)? –