実現したいこと
学習のためにcloud firestoreを使用して、お金のやりとりアプリを作成しています。
数字を入力しボタンを押した際に、片方のdocからは入力した数字を引く。もう片方のdocからは入力した数字を足すというシンプルなアプリです。
何かエラーが起こった時のためにDBに整合性を持たせるためにTransaction処理を施したいです。
ソースコード
JavaScript
1const subtract = firebase.firestore().collection('wallet').doc(subtractTest); 2const add = firebase.firestore().collection('wallet').doc(addTest); 3 4firebase.firestore().runTransaction(transaction => { 5return transaction.getAll(subtract, add) // エラー発生箇所 6// ここから下はあまり関係ないかもしれません 7.then(docs => { 8// 上記「実現したこと」蘭の「入力した数字を引く」処理 9const subtractWallet = docs.data().wallet - this.state.sendInputWallet; 10 transaction.update(sendUserData, { 11 wallet: this.state.wallet = subtractWallet 12 }); 13// 上記「実現したこと」蘭の「入力した数字を足す」処理 14const addWallet = docs.data().wallet + parseInt(this.state.sendInputWallet); 15 transaction.update(reseiveUserData, { 16 wallet: reseiveWalletUserExtract[0].wallet = addWallet 17 }); 18})
発生しているエラー
Uncaught (in promise) TypeError: transaction.getAll is not a function
試したこと1
ソースコード4行目の.getAll
を.get
へ変換しました。
エラー発生
Function Transaction.get() requires 1 argument, but was called with 2 arguments.
.get
の場合は引数は1つでないといけないみたいです。
試したこと2
無茶苦茶かもしれませんが、.getAll
を削除し、以下のように記述しました。
記述内容
return transaction(sendUserData, reseiveUserData)
エラー発生
Uncaught (in promise) TypeError: transaction is not a function
.getAll
を削除する前と同じエラーが発生しました。
このエラーを見て、自分で解決するのが困難であると考えました。
何が原因だと考えるか
1、複数のdocを一度にTransactionすることができない。
2、そもそもTransaction処理で.getAll
を記述すること自体が間違えている。
他にfirebaseにおけるTransaction処理の記述方法がございましたら、ご教授願いたいです。
よろしくお願いいたします。
参考にしたサイト
MDN TypeError: "x" is not a function
TypeScript & React & Firebase で何かつくってみる7 Functions 4
Firestoreの複数のgetトランザクション、angelfire2、google-cloud-firestoreによるトランザクション
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/12 21:42