Angular2, как создать Promise, который выполняет Observable внутри? - PullRequest
0 голосов
/ 08 мая 2018

Я думаю, что это не очень сложная проблема, но я немного запутался, как использовать Promise для этого.

Есть 3 важных случая:

  • Компонент
  • HtppService
  • ToolService

Структура выглядит следующим образом: Компонент имеет ToolService для выполнения функций - например, функция create (). ToolService имеет HttpService, а метод create () выглядит следующим образом:

public create(){

  this.httpService.create().subscribe(

    (data) => {
      //some complex processing
    },
    (error) => {
      //handling error
    }
  );

}

Как вы можете догадаться, httpService.create() возвращает http.put()

Проблема в том, что я хочу сообщить Component о результате create(). Поэтому моя идея заключалась в том, что create() должен вернуть Обещание, которое будет выполнено, когда (data), и отклонено, когда (error).

.

Я немного запутался, как это сделать. Может быть, я должен сделать это по-другому? Пожалуйста, предложите что-нибудь.

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Внутри Вашего сервиса import {Http, Response} from '@angular/http'; import { Observable } from 'rxjs/Observable';

в вашем сервисном конструкторе создайте экземпляр Http constructor(private http:Http){}

public create(parameterToBeSend : any){
  return 
  this.http.put(`http://enter_your_service_url_here`,parameterToBeSend)
  .map( (response: Response) => {
      const data = response.json();
      return data;
   })
  .catch( (error: Response) => {
      return Observable.throw('Something went wrong');  
   }) 
  }

.map создаст еще один наблюдаемый объект, и перед отправкой данных вашему компоненту вы можете просто обработать его здесь. .catch если вы хотите отправить какую-либо ошибку настройки, это будет полезно, но убедитесь, что она не возвращает Observable, поэтому вам нужно конвертировать ее явно, как я. Наконец в вашем компоненте используйте следующее

public create(){
this.httpService.create().subscribe(
 (data) => {//complex process},
 (error) => {//handling error}
);
}
0 голосов
/ 08 мая 2018

Ваш "Toolservice" должен быть как ниже

create(): Observable<any> {
   return this.httpService.create().map((response) => {
      return response;
   });
 }

И "Компонент" должен быть таким

this.toolService.create().subscribe((response) => {
   // Do what ever you want here
});

Надеюсь, это поможет вам!

...