打字稿承诺响应/错误的通用处理

Phi*_*tin 2 error-handling promise typescript

我有许多函数,它们都在返回承诺时执行完全相同的操作。this.client是一组 API 调用的包装器,它们返回响应或错误。我希望以同样的方式处理这些。

有什么想法可以将这些方法中的每一种减少到一个衬垫中吗?

  getHealthCheck() {
    return this.client.tools.healthcheck().then((response) => {
      return {success: true, result: response};
    }).catch((err) => {
      return {success: false, err: err };
    });;
  }

  createUser(data) {

    return this.client.users.create(data).then((response) => {
      return {success: true, result: response};
    }).catch((err) => {
      return {success: false, err: err };
    });;

  }

  createCardAccount(data) {
    return this.client.cardAccounts.create(data).then((response) => {
      return {success: true, result: response};
    }).catch((err) => {
      return {success: false, err: err };
    });;
  }

  createBankAccount(data) {
    return this.client.bankAccounts.create(data).then((response) => {
      return {success: true, result: response};
    }).catch((err) => {
      return {success: false, err: err };
    });;
  }

  makePayment(data) {
    return this.client.items.makePayment(data).then((response) => {
      return {success: true, result: response};
    }).catch((err) => {
      return {success: false, err: err };
    });;
  }
Run Code Online (Sandbox Code Playgroud)

Sea*_*ira 5

为什么不将响应提升为另一种类型:

type Success<T> = {success: true, result: T};
type Failure = {success: false, err: Error};
type Result<T> = Success<T> | Failure;
const Result = {
  from<T>(promise: Promise<T>): Promise<Result<T>> {
    return promise
           .then(result => ({success: true, result}))
           .catch(err => ({success: false, err}));
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以这样使用它:

return Result.from(this.client.tools.healthcheck());
Run Code Online (Sandbox Code Playgroud)