メインコンテンツまでスキップ

トランザクション

単一または複数のドキュメントに対して、パフォーマンス向上のためにアトミックな方法で複数のミューテーションを実行します。

トランザクションは、一連のミューテーションを単一のアトミックな作業単位として実行する必要があるシナリオで有用です。たとえば、すべてのドキュメント間でデータの一貫性を確保するために、複数のドキュメントを単一のトランザクションの一部として更新したい場合があります。

Squidでトランザクションを実行するには、squid オブジェクトが提供する runInTransaction メソッドを使用します。このメソッドは、トランザクションのコンテキスト内で実行される callback 関数をパラメータとして受け取ります。

Client code
await squid.runInTransaction(async (transactionId: string) => {
const user1 = squid.collection<User>('users').doc('user_1_id');
const user2 = squid.collection<User>('users').doc('user_2_id');
await user1.update({ name: 'Alice' }, transactionId);
await user2.update({ name: 'Bob' }, transactionId);
});

トランザクション内で変更を適用する場合、これらの変更は即座には反映されませんが、callback 関数が完了すると楽観的に反映されます。

これは、トランザクションを使用せずにミューテーションを適用する場合とは対照的で、後者では変更が即座かつ楽観的に適用されます。トランザクションの一部として適用されたミューテーションは即座に解決されますが、サーバー上で変更が適用されることを確認するには、runInTransaction から返されるプロミスが解決するのを待つ必要があります。

Note

複数のコネクタでトランザクションを適用する場合、各コネクタはアトミックに更新されます。しかし、あるコネクタは更新されても、別のコネクタが失敗する可能性があります。コネクタ間でのアトミックな更新はサポートされていません。