2017-01-11 11 views
0

私は、約束を返す際に全く同じアクションを実行する多くの機能を持っています。 this.clientは一連のAPI呼び出しのラッパーで、応答またはエラーを返します。私はこれらすべてを同じように扱いたい。typescriptの一般的な処理応答/エラー

これらの方法を1つのライナーに減らすことはできますか?

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

成功とエラーのためにあなたのコールバックは、あなたが行うことができ ..同じのようです。

関連する問題