2017-01-11 1 views
0

나는 약속의 반환시 모두 똑같은 동작을 수행하는 여러 가지 기능을 가지고 있습니다. this.client은 일련의 API 호출에 대한 래퍼이며 응답이나 오류를 반환합니다. 나는이 모든 것을 똑같은 방법으로 처리하고 싶다.typescript의 일반적인 핸들링 응답/오류

모든 아이디어를 하나의 라이너로 줄일 수 있습니까?

successHandler = (response:any)=>{ 
    return {success: true, result: response}; 
    } 
errorHandler = (error:any)=>{ 
    return {success: false, err: err }; 
    } 

하고 모든 요청에 ​​대해

,

getHealthCheck() { 
    return this.client.tools.healthcheck().then(this.successHandler).catch(this.errorHandler); 
    } 

// other calls 

그것의 DRY 원칙을 :

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 }; 
    });; 
    } 

답변

2

:

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})); 
    } 
} 

이 그럼 당신은 그래서 그것을 사용할 수 있습니다

return Result.from(this.client.tools.healthcheck()); 
+0

나는 문서 다음, 비슷한 구현을 시도했다 :은 https ://www.typescriptlang.org/docs/handbook/generics.html 이것은 앞으로 TS에서 나의 접근 방식을 바꾸고 있습니다. 정말 공유 주셔서 감사합니다. –

1

성공 및 오류에 대한 귀하의 콜백은 당신이 할 수있는 .. 같은 것 같다.

또 다른 타입으로 응답을 들지 왜