件数で同期/非同期が切り替わる一括操作は、FEがレスポンスの mode/status で「開始」と「完了」を区別する
フロントエンド
非同期処理
状態管理
知識
運用
件数などの閾値でバックエンドが同期完了(SYNC/COMPLETED)と非同期受付(ASYNC/PENDING)を返し分けるAPIでは、フロントがレスポンスの mode/status を見ずに一律で「完了 toast +モーダル閉じ」にすると不具合になる。非同期時は worker 未完了なのに「完了しました」と表示され、かつ一覧を mutation 成功直後に invalidate しても worker 完了前なので古いまま残る(完了表示なのにデータは更新前)。
正しい扱い:
- SYNC/COMPLETED のときだけ即時に対象一覧を invalidate し、完了 toast を出す。
- ASYNC/PENDING は「開始しました」通知に分ける(完了とは名乗を分ける)。
- 完了はジョブ状態のポーリング(対象ジョブが「あり→なし(null)」に遷移)で検知し、そのタイミングで影響するデータ群を invalidate する。
- 完了通知の current job が対象リソース種別を返さないなら、実装を単純にするなら関連一覧をまとめて invalidate、対象を絞るなら開始時のリソース種別をFE側に保持する。
付随の教訓: この不具合は、ブラウザテストが ASYNC/PENDING ケースで「完了」文言を期待して固定していた――テストが仕様の誤解をそのまま固定していた例。非同期化の際はテストの期待値が「開始」を見ているかも見直す。