2016-05-10 3 views
1

я следующий метод, используя Ионные 2 с угловыми 2:Наблюдаемые не стреляя во угловом запросе HTTP 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; 
} 

Независимо от того, что я делаю, то не подписываться не работаю, как ожидался. Обработчик ошибок никогда не запускается. Даже после превышения таймаута.

Это известная проблема, или что-то не так с моим синтаксисом?

Любая помощь будет оценена по достоинству.

+0

Для тех, кому интересно, я использую следующий импорт: импорт {Http, заголовки, RequestOptions, Response, HTTP_PROVIDERS} из ' angular2/HTTP '; и введите его в мой класс внутри конструктора –

+1

Пожалуйста, скорее отредактируйте свой вопрос и добавьте дополнительную информацию. Код является громоздким для чтения в комментариях. –

+0

Что вы импортируете в отношении rxjs? –

ответ

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(); 
} 
+0

Будет ли это не только улавливать таймаут? Я также не думаю, что функция карты будет достаточной для меня, так как я выполняю много других (асинхронных) задач в обработчике успеха, например, сохранение возвращенного json в базу данных. Я понимаю, что http вернет обещание, но разве нельзя было бы вложить обещания? –

+0

Уверен, это возможно, но это кажется немного громоздким. Есть операторы (например, flatMap), которые ждут асинхронных вызовов. Я думаю, что код будет намного читабельнее, чем Rx, чем смешивать наблюдаемые и обещания. –

+1

У меня есть работа с небольшим изменением кода! Спасибо за вклад в использование обещаний вместо наблюдаемых ... мне очень помогли! –

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