Обработка угловых постов http - PullRequest
0 голосов
/ 29 мая 2018

Я занимаюсь разработкой приложения с ионным 3 / angular и столкнулся с небольшой проблемой.Я делаю почтовый запрос из службы и пытаюсь работать с возвращенным значением при успешном обратном вызове.Я получаю следующую ошибку переноса:

Argument of type 'ArrayBuffer' is not assignable to parameter of type 'Occasion'. Property 'id' is missing in type 'ArrayBuffer'.

Код, приводящий к ошибке:

this.api.post('occasions', occasion).subscribe(occasion => {
    this.myOccasions.unshift(occasion);
    this.myOccasionsChanged.next(this.myOccasions);
  },

Список this.myOccasions определяется как private myOccasions: Occasion[];

Моя функция поста службы API определена следующим образом:

post(endpoint: string, body: any, reqOpts?: any) {
  if (!reqOpts) {
    reqOpts = {};
  }

  let headers = {};
  this.addAccessTokenToHeaders(headers);
  reqOpts.headers = headers;
  return this.http.post(this.url + '/' + endpoint, body, reqOpts);

}

Не могли бы вы, ребята, подсказать мне, как согласовать типы?Конечно, моя конечная точка POST возвращает OccasionDto для работы.Ура!

Ответы [ 2 ]

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

Я нашел ответ на свой вопрос.Я справился с этим следующим образом:

В моем ApiService я изменил сигнатуры методов, чтобы они требовали указать ожидаемый тип возвращаемого значения и установить тип ответа «json», поскольку, согласно угловым документам,тогда http-клиент возвратит Observable<Object>.

 post<T>(endpoint: string, body: any): Observable<T> {
    return this.http.post<T>(this.url + '/' + endpoint, body, {responseType: 
    'json'});
 }

Затем, когда я вызываю мой метод apiService, я указываю, какую сущность я хочу получить, как показано ниже:

this.api.post<Occasion>('occasions', occasion).subscribe(result => {
    this.myOccasions.unshift(result);
    this.myOccasionsChanged.next(this.myOccasions);
  },

Iдумаю, что это довольно опрятно, хотя, если у кого-то есть что-то чище / лучше, пожалуйста, поделитесь:)

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

Вы можете сопоставить метод .post () для преобразования данных и возврата того, что вам нужно (Occasion)

post(endpoint: string, body: any, reqOpts?: any): Observable<Occasion> {
   //etc...
   return this.http.post(this.url + '/' + endpoint, body, reqOpts);
   .map( data => {
      //do some transformation in the data, to return an `Occasion`
      const newData = /* something here, a function, a new Occasion(args), etc.... */
      return newData;
   })
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...