6

firebase関数を使用してストライプに追加された最後のカードをデフォルトとして設定しようとしていますが、動作させられないようです。デフォルトの支払いを設定するストライプfirebase関数

// Add a payment source (card) for a user by writing a stripe payment source token to Realtime database 
exports.addPaymentSource = functions.database.ref('/users/{userId}/sources/{pushId}/token').onWrite(event => { 
    const source = event.data.val(); 
    if (source === null) return null; 
    return admin.database().ref(`/users/${event.params.userId}/customer_id`).once('value').then(snapshot => { 
    return snapshot.val(); 
    }).then(customer => { 
    return stripe.customers.createSource(customer, {source}); 
    return stripe.customers.update(customer, {default_source: source}); 
    }).then(response => { 
     return event.data.adminRef.parent.set(response); 
    }, error => { 
     return event.data.adminRef.parent.child('error').set(userFacingMessage(error)).then(() => { 
     // return reportError(error, {user: event.params.userId}); 
     consolg.log(error, {user: event.params.userId}); 
     }); 
    }); 
}); 

答えて

2

あなたはこの1つの機能で2つのことを返そうとしています。それはうまくいきません。ソースを作成する必要がありますが、ソースは更新されません。

return stripe.customers.createSource(customer, {source}); 
return stripe.customers.update(customer, {default_source: source}); 
+0

はい、それが作成され、doesntの更新、私はそれの重要な正しいカードとして更新デフォルトのカードを必要と充電され –

+1

次の2つの関数を返すことができません。したがって、ソースを作成してから、ソースを作成した後に追加のコールバックを追加して、デフォルトのソースを更新する必要があります。私は彼らのドキュメントに掘り下げなければならないだろうが、そのアイデアはそうであろう。 createSource()。then(=> update())。then(=>あなたのデータベースを更新する)。同時に作成して更新しようとすると、両方の関数を返そうとします。だから、ちょうど自身のコールバック関数に秒をバンプし、あなたは行くのが良いでしょう。 – Notmfb

+1

これは正しいです。最初のreturn文だけが約束を伝播するために使用され、2番目のreturn文は決して評価されません。 @ Paul'Whippet'McGuaneは、jslintやeslintなどの解析ツールを使用することを検討してください。これらの種類の静的解析を静的にキャッチしてください。 –

関連する問題