Наблюдаемый, не стреляющий во время Angular 2 HTTP-запроса
У меня есть следующий метод, используя Ionic 2 с Angular 2:
private login(params: any, url: string){
var p = new Promise<JsonResult>((resolve, reject) => {
let body = JSON.stringify(params);
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
this.http.post(url, body, options)
.timeout(10000, new Error('Timeout exceeded during login'))
.subscribe((res) => {
let json = new JsonResult().deserialize(res.json());
resolve(json);
}, (err) => {
reject(err);
});
});
return p;
}
Независимо от того, что я делаю, подписка не работает, как ожидалось. Обработчик ошибок никогда не срабатывает. Даже после истечения времени ожидания.
Это известная проблема или что-то не так с моим синтаксисом?
Любая помощь будет оценена.
1 ответ
Если вы хотите вернуть Promise
Я бы сделал это так:
private login(params: any, url: string){
let body = JSON.stringify(params);
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http.post(url, body, options)
.timeout(10000, new Error('Timeout exceeded during login'))
.catch(err => {
console.log(err);
return Observable.of([]));
})
.map((res) => {
return new JsonResult().deserialize(res.json());
})
.toPromise();
}