Создание пользовательских Observable необходимо при использовании заголовков на универсальном методе - PullRequest
0 голосов
/ 03 марта 2019

Я создал общий сервис, как это.

common.ts

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})
export class CommonService {

  constructor(private http: HttpClient) { }

  post(url: string, params: any): Observable<any> {
    return new Observable(observer => {
      const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }) };
      this.http.post(url, params, httpOptions)
        .subscribe(response => {
          observer.next(response);
          observer.complete();
        }, (err) => {
          observer.error(err);
        });
    });
  }
}

my-service.ts

 book(data: Spa): Observable<any> {
    return this.commonService.post(`${environment.apiURL}/my/v3/my.json`, data);
  }

page.ts

  book() {
     this.myService.book(spa).subscribe((res: any) => {
      }, error => { console.log(error); });
     }
  }

В: Нужно ли создавать собственный метод Observable на post()?Так как this.http.post(url, params, httpOptions) возвращает Observable надеюсь, мне не нужно создавать пользовательские Observable снова нет (то есть common.ts)?

Примечание: Выше работает нормально и без ошибок, хотя.

1 Ответ

0 голосов
/ 03 марта 2019

Функция post возвращает наблюдаемое, и его можно набрать, если вы этого хотите, тогда вам не нужно создавать другое наблюдаемое, для которого вы можете упростить:

post(url: string, params: any): Observable<any> {
   const httpOptions = { headers: new HttpHeaders({ 'Content-Type': 'application/x-www-form-urlencoded' }) };
   return this.http.post(url, params, httpOptions);
}
...