Я общаюсь с webservice, и возврат может быть отрицательным или porisitvo и попадет в успех вызова, но если возврат отрицательный, мне нужно вручную выбросить исключение
.map(res => res.json())
.subscribe(res => {
let returno = JSON.parse(res.d);
if (returno.status == 'success') {
this._loggedIn(returno);
} else {
throw returno;
}
}, err => {
console.error('ERROR', err);
});
Вы можете создавать исключения в JS, просто передавая объекты для throw
. Поэтому throw err
в своем случае.
Я ожидаю, что вы захотите, чтобы все ваши подписчики обрабатывали ошибку таким же образом? Поэтому вы можете обрабатывать ошибку на уровне Observable, а не на уровне Subscriber.
Таким образом, вы можете сделать что-то вроде следующего:
public tryLogin(url: string): Observable<any> {
return this.http.get(url)
.map(res => res.json().d)
.map(res => {
if (res.status !== 'success') {
Observable.throw(res);
}
return res;
});
}
Затем вы можете вызвать этот код следующим образом:
this.tryLogin('mydata')
.subscribe(
data => this._loggedIn(data),
err => console.log(err);
)
Самое замечательное в этом подходе - если вы не хотите, чтобы ваши подписчики знали, что произошло, вы можете абстрагироваться от них и либо аутентифицировать их в next
обратном вызове, либо обработать событие сбоя в error
вызове error
.