From dc11ef90fda8d82aa9b35404f8e3749815304b36 Mon Sep 17 00:00:00 2001 From: congsh Date: Sat, 18 Apr 2026 20:05:27 +0800 Subject: [PATCH] fix(phase3): add $autoCancel:false to prevent SDK auto-cancellation PocketBase JS SDK auto-cancels pending requests when a new request targets the same collection. This causes errors when loadLedgers and getLedgerSummary run in parallel via Promise.all. Added $autoCancel:false to all API calls in ledgers.ts and assets.ts, matching project convention. Co-Authored-By: Claude Opus 4.7 --- frontend/src/api/assets.ts | 13 +++++++------ frontend/src/api/ledgers.ts | 34 +++++++++++++++++----------------- 2 files changed, 24 insertions(+), 23 deletions(-) diff --git a/frontend/src/api/assets.ts b/frontend/src/api/assets.ts index 314fc16..00f9703 100644 --- a/frontend/src/api/assets.ts +++ b/frontend/src/api/assets.ts @@ -25,14 +25,15 @@ export async function createAsset(data: CreateAssetData): Promise { if (data.description) formData.append('description', data.description) if (data.image) formData.append('image', data.image) - return pb.collection('assets').create(formData) as Promise + return pb.collection('assets').create(formData, { $autoCancel: false }) as Promise } export async function listAssets(groupId: string): Promise { const result = await pb.collection('assets').getFullList({ filter: `group="${groupId}"`, sort: 'created', - expand: 'creator,currentHolder' + expand: 'creator,currentHolder', + $autoCancel: false }) return result as unknown as Asset[] } @@ -49,20 +50,20 @@ export async function updateAsset( if (data.description !== undefined) formData.append('description', data.description) formData.append('image', image) - return pb.collection('assets').update(assetId, formData) as Promise + return pb.collection('assets').update(assetId, formData, { $autoCancel: false }) as Promise } - return pb.collection('assets').update(assetId, data) as Promise + return pb.collection('assets').update(assetId, data, { $autoCancel: false }) as Promise } export async function transferAsset(assetId: string, userId: string): Promise { return pb.collection('assets').update(assetId, { currentHolder: userId - }) as Promise + }, { $autoCancel: false }) as Promise } export async function deleteAsset(assetId: string): Promise { - await pb.collection('assets').delete(assetId) + await pb.collection('assets').delete(assetId, { $autoCancel: false }) } export function subscribeAssets( diff --git a/frontend/src/api/ledgers.ts b/frontend/src/api/ledgers.ts index 0435e54..6c60b6d 100644 --- a/frontend/src/api/ledgers.ts +++ b/frontend/src/api/ledgers.ts @@ -32,7 +32,7 @@ export async function createLedger(data: CreateLedgerData): Promise { ...data, creator: user?.id || '', relatedMembers: data.relatedMembers || [] - }) + }, { $autoCancel: false }) return record as unknown as Ledger } @@ -45,11 +45,9 @@ export async function listLedgers( if (type) filter += ` && type="${type}"` if (category) filter += ` && category="${category}"` if (month) { - // month format: "2026-04" const start = `${month}-01 00:00:00` const year = parseInt(month.slice(0, 4)) const mon = parseInt(month.slice(5, 7)) - // 下个月的第一天 const nextMonth = mon === 12 ? `${year + 1}-01` : `${year}-${String(mon + 1).padStart(2, '0')}` const end = `${nextMonth}-01 00:00:00` filter += ` && occurredAt>="${start}" && occurredAt<"${end}"` @@ -58,7 +56,8 @@ export async function listLedgers( const result = await pb.collection('ledgers').getList(page, limit, { filter, sort: '-occurredAt', - expand: 'creator,relatedMembers' + expand: 'creator,relatedMembers', + $autoCancel: false }) return { items: result.items as unknown as Ledger[], total: result.totalItems } } @@ -67,12 +66,12 @@ export async function updateLedger( ledgerId: string, data: Partial ): Promise { - const record = await pb.collection('ledgers').update(ledgerId, data) + const record = await pb.collection('ledgers').update(ledgerId, data, { $autoCancel: false }) return record as unknown as Ledger } export async function deleteLedger(ledgerId: string): Promise { - await pb.collection('ledgers').delete(ledgerId) + await pb.collection('ledgers').delete(ledgerId, { $autoCancel: false }) } export async function getLedgerSummary( @@ -85,20 +84,21 @@ export async function getLedgerSummary( const batchSize = 500 let hasMore = true - while (hasMore) { - let filter = `group="${groupId}"` - if (month) { - const start = `${month}-01 00:00:00` - const year = parseInt(month.slice(0, 4)) - const mon = parseInt(month.slice(5, 7)) - const nextMonth = mon === 12 ? `${year + 1}-01` : `${year}-${String(mon + 1).padStart(2, '0')}` - const end = `${nextMonth}-01 00:00:00` - filter += ` && occurredAt>="${start}" && occurredAt<"${end}"` - } + let filter = `group="${groupId}"` + if (month) { + const start = `${month}-01 00:00:00` + const year = parseInt(month.slice(0, 4)) + const mon = parseInt(month.slice(5, 7)) + const nextMonth = mon === 12 ? `${year + 1}-01` : `${year}-${String(mon + 1).padStart(2, '0')}` + const end = `${nextMonth}-01 00:00:00` + filter += ` && occurredAt>="${start}" && occurredAt<"${end}"` + } + while (hasMore) { const result = await pb.collection('ledgers').getList(page, batchSize, { filter, - fields: 'type,amount' + fields: 'type,amount', + $autoCancel: false }) for (const item of result.items as any[]) {