Наблюдаемый, не стреляющий во время 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();
}
Другие вопросы по тегам