2016-10-13 1 views
0

Когда я расширяю Http класс для добавления тайм-аута сеттер с помощью rxjs, оператор timeout не работает, когда я импортировать его как этот import 'rxjs/add/operator/timeout'оператор Angular2 Тайм-аут не работает на расширенной Http

Он работает только тогда, когда я загружаю вся rxjs библиотеки

live plnkr

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") 
     }); 
    } 


} 
+0

Не похоже, что проблема связана с тем, что 'тайм-аут()' используется в классе, который расширяет 'Http', как указано в название. –

+0

@ GünterZöchbauer работает с прокомментированным кодом в plnkr, но только когда я использовал его в расширенном http, я получил ошибку –

+0

И когда вы используете timout с помощью 'http.get()' непосредственно (без пользовательского 'WpHttp',)? –

ответ

2

Это фиксируется путем добавления все использованные операторы

import 'rxjs/add/operator/timeout'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/finally'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/observable/throw'; 
import {Observable} from 'rxjs/Observable'; 

 Смежные вопросы

  • Нет связанных вопросов^_^