TAKOYAKING’s blog 一覧

TAKOYAKING’s blog

たこ焼き系

Firebase: 異なるcollection配下にある複数のDocumentにトランザクションを実行する方法

状況

異なるcollection配下にある複数のdocumentに対してtransactionを実行したい

やり方

参考:
Cloud Firestore で複数の DocumentReference に対し Transaction を実行する - Qiita

同じトランザクションを使い回せば大丈夫なようです。
入れ子にした、違うトランザクションだとコミットされてしまったものはロールバックされないのでダメです。

正しい例:

const res = await firestore.runTransaction(async t => {
    t.create(refA, insertDataA);
    t.create(refB, insertDataB);
    throw 'error'; // 両方のデータがロールバックされる。
});

ダメな例:
入れ子にして違うトランザクションを実行してしまう。

const res = await firestore.runTransaction(async t1 => {
    t1.create(refA, insertDataA);
    const res = await firestore.runTransaction(async t2 => {
        t2.create(refB, insertDataB);
    )};
    throw 'error'; // t2はコミットされてしまうが、t1はロールバックされる。
});