2016-08-08 23 views
0

1)私はDRYの原則を遵守したいと考えています。 両方のメソッドの構造はほぼ同じです。これは実装を繰り返していない方法である場合、私は疑問に思って:ReactネイティブDRY Javascript

addCardToExistingCustomer(cardDetail){ 
    PaymentUtil.stripeCreateCardToken(cardDetail).then((cardTokenResult)=>{ 
     if(cardTokenResult.error){ 
     console.log("There was an error with the card!"); 

     } else { 
      PaymentUtil.addCardToExistingCustomer(cardTokenResult.id).then((card) =>{ 


      }); 
     } 
    }); 
    } 

    addCardToNewCustomer(cardDetail){ 
    this.stripeCreateCardToken(cardDetail).then((cardTokenResult)=>{ 
     if(cardTokenResult.error){ 
     console.log("There was an error with the card!"); 

     } else { 
     console.log("Successfully created card token"); 
     PaymentUtil.stripeCreateCustomer(cardTokenResult.id) 

     } 
    }); 
    } 

2)これは、チェーン約束するための最良の方法ですか?具体的には、チェーンの最後の要素ではない、チェーン内の約束からどのように例外を処理するべきですか?

たとえば、約束getStripeCustomerIdが拒否されました。あなたはその拒絶をどのように扱うべきですか?

addCardToExistingCustomer(cardTokenResultId){ 
    return this.getStripeCustomerId(userDetail).then((customerId) => { 
      return this.removeAllExistingCards(userDetail).then(()=>{ 
        return Stripe.addCardToCustomer(cardTokenResultId,customerId); 
      }); 
     });  
}, 


getStripeCustomerId(userDetail){ 
    return FirebaseRESTUtil.getStripeCustomer(userDetail.username) 
     .then((fbStripe) => (fbStripe.customerId)); 
}, 

答えて

3

1-この方法は、データに作用する約束を使用します。

getCardTokenResult(cardDetail) { 
    return PaymentUtil.stripeCreateCardToken(cardDetail) 
    .then((cardTokenResult) => { 
     if(cardTokenResult.error){ 
     return Promise.reject('There was an error with the card!!'); 
     } else { 
     return cardTokenResult; 
     } 
    }) 
    .catch((error) => console.log(error)): 
} 

addCardToExistingCustomer(cardDetail){ 
    return getCardTokenResult(cardDetail) 
    .then((cardTokenResult) => { 
     PaymentUtil.addCardToExistingCustomer(cardTokenResult.id).then((card) =>{ 
     // do something 
     }); 
    }); 
} 

addCardToNewCustomer(cardDetail){ 
    return getCardTokenResult(cardDetail) 
    .then((cardTokenResult) => { 
     PaymentUtil.stripeCreateCustomer(cardTokenResult.id); 
    }); 
} 

2 - あなたは約束チェーン上のエラーを取得するためにキャッチを使用することができます。上のコードを見ることができます。私はcardtokenresultエラーを取得するキャッチを追加しました。他のエラーを得るためにチェーン上で同じ方法を続けることができます。

0

私はあなたのthenの最初の引数でエラーをチェックしていることに気付きました。 Stripeがエラー時にHTTP 200ステータスを返さないため、これは間違いであると私は確信しています。

addCardToExistingCustomer(cardTokenResultId) { 
    return this.getStripeCustomerId(userDetail).then((customerId) => { 
     return this.removeAllExistingCards(userDetail); // returns a promise 
    }).then(() => { 
     return Stripe.addCardToCustomer(cardTokenResultId,customerId); // returns a promise 
    });  
}, 

メイン外側の約束まで今、何らかのエラーがするバブル:

は、私はそれがコード維持し、読みやすいになることがわかりますので、私は代わりにそれらをネストの連鎖約束を平らにしたいと述べましたので、エラーを確認することができます。

addCardToExistingCustomer(myId).then(() => { 
     console.log('success!'); 
    }, (error) => { 
     console.log(error); 
    });