逆控制器中的错误处理

时间:2019-03-05 10:31:49

标签: typescript inversifyjs

我正在使用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 个答案:

答案 0 :(得分:1)

如果要重新抛出,则可以抛出任何内容,因为通常拒绝类型不正确(即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