例えばAさんとBさんの所持金が1000円でAさんが入力フォームから100と入力してBさんに送信するとBさんに100円を送金できるシステムを組みたいです。
Vuexのactions内でfirestoreの特定のフィールドを呼び出して書き換えることで実現しましたが、こちらのコードですと送金される側のコードが実行されなかった場合に、送金した側の所持金だけが変更されてしまいます。
そこでfirestoreのtransactionを使用したいのですが、送金する側される側二つの処理をtransactionで行いたい場合はどのような記述をしたら良いでしょうか?
Vuex
1// getTransfer 入力フォームの金額 2// isMyUid 送金する側のfirebaseAuthのUID(各ユーザーのfirestoreのフィールドにUIDを格納している) 3// state.isUid 送金される側のfirebaseのUID 4// balance 所持金 5 6updateUserBalance({ state, commit }, getTransfer) { 7 const isMyUid = firebase.auth().currentUser.uid 8 //送金される側 9 db.collection('users').where('uid', '==', state.isUid).get() 10 .then((docs) => { 11 docs.forEach((doc) => { 12 db.collection('users').doc(doc.id).update({ 13 balance: Number(state.isBalance) + Number(getTransfer) 14 }) 15 }) 16 commit('updateDestinationBalance', getTransfer) 17 }) 18 .catch(function(error) { 19 console.log(error) 20 }) 21 //送金する側 22 db.collection('users').where('uid', '==', isMyUid).get() 23 .then((docs) => { 24 docs.forEach((doc) => { 25 db.collection('users').doc(doc.id).update({ 26 balance: Number(state.balance) - Number(getTransfer) 27 }) 28 }) 29 commit('updateMyBalance', getTransfer) 30 }) 31 .catch(function(error) { 32 console.log(error) 33 }) 34 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/11 07:07
2021/02/11 07:20
2021/02/11 07:33
2021/02/11 07:39
2021/02/11 08:08
2021/02/11 08:10
2021/02/11 12:35
2021/02/12 00:36