Часть моего кода:
import {Injectable} from 'angular2/core';
import {Http, Headers, Request, Response} from 'angular2/http';
import {Observable} from 'rxjs/Observable';
import 'rxjs/add/operator/map';
@Injectable()
export class myClass {
constructor(protected http: Http) {}
public myMethod() {
let request = new Request({
method: "GET",
url: "http://my_url"
});
return this.http.request(request)
.map(res => res.json())
.catch(this.handleError); // Trouble line.
// Without this line code works perfectly.
}
public handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
myMethod()
выдает исключение в консоли браузера:
ОРИГИНАЛЬНОЕ ИСКЛЮЧЕНИЕ: TypeError: this.http.request (...). Map (...). Catch не является функцией
throw()
функцией.import 'rxjs/Rx';
Вместо этого я добавил эту строку . Теперь все операторы работают исправно..catch
действительно ли она работает? Это.subscribe()
точно работает.EXCEPTION: TypeError: Observable_1.Observable.throw is not a function
. Это может быть исправлено с помощью ответа @MattScarpino или с помощью этого плункера, как я сказал выше: angular.io/resources/live-examples/server-communication/ts/…import 'rxjs/add/observable/throw';
и не импортируйте все, это слишком велико.Новая служба обновлена для использования HttpClientModule и RxJS v5.5.x :
Старая служба, использующая устаревший HttpModule:
Использую
.do()
( сейчас.tap()
) для отладки.Когда есть ошибка сервера, то
body
изResponse
объекта я получаю от сервера я использую (облегченный-сервер) содержат только текст, следовательно, причину я используюerr.text()
выше, чемerr.json().error
. Возможно, вам потребуется настроить эту строку для вашего сервера.Если
res.json()
возникает ошибка, потому что он не может проанализировать данные JSON,_serverError
не получитResponse
объект, следовательно, причина дляinstanceof
проверки.В этом случае plunkerизмените значение
url
на,./data/data.junk
чтобы сгенерировать ошибку.У пользователей любой из служб должен быть код, который может обрабатывать ошибку:
источник
Есть несколько способов сделать это. Оба очень простые. Каждый из примеров отлично работает. Вы можете скопировать его в свой проект и протестировать.
Первый способ предпочтительнее, второй немного устарел, но пока тоже работает.
1) Решение 1
2) Решение 2. Это старый способ, но все еще работает.
источник
Функции RxJS необходимо специально импортировать. Легкий способ сделать это - импортировать все его функции с помощью
import * as Rx from "rxjs/Rx"
Затем убедитесь, что вы получили доступ к
Observable
классу какRx.Observable
.источник
в последней версии angular4 используйте
он импортирует все необходимые вещи.
источник