2016-10-27 8 views
0

Я использую наблюдаемые для Http-вызовов, которые работают нормально, но затем я изменил свои контроллеры и заметил, что мой код, по-видимому, не обрабатывает ошибки.Angular 2: http.get in Observable not handling error

Вот посмотрите на код из моей службы (SellingMenuService):

public getVarieties(): Observable<any> { 
    return this.http.get(this.varietyListUrl).map(response => { 
     return response.json(); 
    }, (error: any) => { 
     console.log(error); 
     console.log('error finding variety list'); 
     // TODO: implement error handling here. 
    }); 
} 

А вот соответствующий код моего компонента:

constructor(public sellingMenuService: SellingMenuService) { } 

getVarietyList(): void {   
    this.sellingMenuService.getVarieties().subscribe(res => {    
     console.log(res); 
     this.varieties = res; 
    });   
} 

А вот некоторые ошибки в моей консоли : enter image description here

Если у меня возникла ошибка 500, не должны ли пострадать эти консольные журналы с моего сервиса выше? Почему бы и нет?

+0

[Здесь рекомендуется официальный путь] (https://angular.io/docs/ts/latest/ guide/server-communication.html #! # error-handling) для обработки исключений по HTTP-запросам от _Angular.io_. Существует ссылка на [живой пример] (https://embed.plnkr.co/?show=preview) на Plunker в нижней части страницы (перейдите в '/ app/toh/hero.service.ts', чтобы см. код службы HTTP-клиента). –

ответ

1

У вас возникла ошибка в обработке ошибок map().

import 'rxjs/add/operator/catch'; 

return this.http.request(request) 
    .map(res => res.json()) 
    .subscribe(
    data => console.log(data), 
    err => console.log(err), 
    () => console.log('yay') 
); 

См: How to catch exception correctly from http.request()?

1

Вы пытаетесь поймать ошибку в методе map, в то время как вы должны делать это в subscribe.

public getVarieties(): Observable<any> { 
    return this.http.get(this.varietyListUrl).map(response => { 
     return response.json(); 
    }).subscribe((res: any) => { 
     console.log(res); 
    }, (error: any) => { 
     console.log(error); 
     console.log('error finding variety list'); 
     // TODO: implement error handling here. 
    }); 
} 

Вы также можете добавить третий параметр к наблюдаемому. Она будет решена, когда наблюдаемым является finalized:

public getVarieties(): Observable<any> { 
    return this.http.get(this.varietyListUrl).map(response => { 
     return response.json(); 
    }).subscribe((res: any) => { 
     console.log(res); 
    }, (error: any) => { 
     console.log(error); 
     console.log('error finding variety list'); 
     // TODO: implement error handling here. 
    },() => { 
     console.log("finalized") 
    }); 
} 

Вы можете прочитать здесь: http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html

+1

Я пробовал свой код и получил следующую ошибку сборки: Тип «Подписка» не присваивается типу «Наблюдаемый » – Brett

+0

Можете ли вы воспроизвести его в plunkr? –

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

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