Подходящий образец и тип объекта, возвращаемого в Observable <T>после почтовой операции - PullRequest
1 голос
/ 01 мая 2019

Согласно Угловому гиду , я должен вернуть размещенный объект.Это имеет смысл в примере, потому что мы хотим работать с сущностью, которая была сохранена в БД.

В моем конкретном случае меня не интересует то, что я публикую.Фактически, объект является оберткой, состоящей из связки несвязанного мусора.На сервере есть серия void вызовов, запускаемых по почте.На данный момент я подписываюсь на сервис, и это логика, основанная на принципе «забей и забудь».

В попытке улучшить качество, я хотел бы сообщить компоненту, что запрошенная операция прошла успешно.код, как это.Я контролирую конечную точку API, чтобы я мог создать число или объект там.

fireAndForget(junk: Junk) : number {
  ...
  this.http.post<number>(url, body)
    .pipe(catchError(this.handleError))
    .subscribe(yey => return yey, neh => return -1);
}

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

const junk: Junk = { ... };
const result = this.service.fireAndForget(junk);
if(result > 0) doStuff(); else doOtherStuff();

Однако я не могу избавиться от ощущения, что я нарушаю шаблон или вмешиваюсь в лучшие практики здесь.У меня есть предчувствие, что я должен вернуть наблюдаемое (все еще типа число , а не Хлам , соответствующий Hero [] в руководстве).Компонент не должен знать сохраненный объект.Немного информации о том, как все прошло.

При условии вышеизложенного, есть ли рекомендуемый, широко применяемый тип для передачи результата, с которым я не знаком?

1 Ответ

0 голосов
/ 01 мая 2019

Вариант 1:

Если вас не интересует тип возврата метода записи, вы можете вернуть число, чтобы убедиться, что тип возврата такой же:

fireAndForget(junk: Junk) : number {
  ...
  this.http.post<number>(url, body)
    .pipe(catchError(this.handleError))
    .map(yey => return 1);
}

А в компоненте вы можете подписаться на вызов метода, например так:

const junk: Junk = { ... };
const result = this.service.fireAndForget(junk)
               .subscribe(yeh=>doStuff(),neh=>doOtherStuff());

Опция 2:

Если вам все равнотип возврата и хотите различить, если запрос был обработан успешно или нет.Этот следующий подход будет работать:

fireAndForget(junk: Junk) : number {
  ...
  this.http.post<number>(url, body)
    .pipe(catchError(this.handleError))
}

в вашем компоненте:

const junk: Junk = { ... };
const result = this.service.fireAndForget(junk)
               .subscribe(yeh=>doStuff(),neh=>doOtherStuff());
...