Обработка ошибок в инверсном контроллере - PullRequest
0 голосов
/ 05 марта 2019

Я использую пакет inversify-express-utils.

Предположим, у меня есть действие контроллера, которое возвращает объект User:

  @httpGet("/:id")
  public async getUser(): Promise<User> {
    try {
      const id = this.httpContext.request.params.id;
      return await this._userRepository.get(id);
    }
    catch (e) {
      this.httpContext.response.status(404);
      // ...what goes here?
    }
  }

Я знаю, что могу опустить тип возврата, но я не хочу обойти систему типов.

Итак, что мне вернуть из этого блока catch?

1 Ответ

1 голос
/ 05 марта 2019

Если вы хотите перебросить, вы можете выбросить все, что захотите, потому что обычно отклоненное значение не набирается должным образом (то есть any).

lib.es5.d.ts:

interface Promise<T> {
    then<TResult1 = T, TResult2 = never>(
        onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null,
        // See `reason` below
        onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null
    ): Promise<TResult1 | TResult2>;

Можно утверждать, что Promise должно иметь два параметра общего типа ...

Если вы перехватываете и возвращаете значение, это должен быть User объект, как указано. Попадание в 404 звучит для меня скорее как отклонение, но я не знаком с этой библиотекой, поэтому, если она не обработает отклонение должным образом, вам, возможно, придется вернуть значение.

Возможно, лучше изменить тип возвращаемого значения на User | null, если вы не можете отклонить его, тогда вы можете вернуть null в случае сбоя.

...