fix(测试数据生成器): 修复 Worker 取消失效与规则存储静默失败

- 为生成任务引入 generationId,忽略过期 Worker 响应,避免取消后展示错误数据
- Worker 每 100 行让出事件循环,使 cancel 消息能被及时处理
- ruleStorage.setAll 返回写入结果,save/update/delete 在 QuotaExceeded 时返回失败
- 补充 useGenerator 与 ruleStorage 单元测试
This commit is contained in:
Cursor Agent
2026-06-26 08:41:32 +00:00
parent a163297de4
commit 42ab669d5f
6 changed files with 262 additions and 25 deletions
+16 -7
View File
@@ -78,7 +78,9 @@ export function save(
useCount: 0,
};
rules.unshift(newRule);
setAll(rules);
if (!setAll(rules)) {
return null;
}
return newRule;
}
@@ -95,7 +97,9 @@ export function save(
updatedAt: now,
};
rules[index] = updatedRule;
setAll(rules);
if (!setAll(rules)) {
return null;
}
return updatedRule;
}
@@ -117,7 +121,9 @@ export function update(id: string, updates: Partial<DataRule>): DataRule | null
updatedAt: Date.now(),
};
rules[index] = updatedRule;
setAll(rules);
if (!setAll(rules)) {
return null;
}
return updatedRule;
}
@@ -132,8 +138,7 @@ export function deleteRule(id: string): boolean {
return false;
}
rules.splice(index, 1);
setAll(rules);
return true;
return setAll(rules);
}
/**
@@ -165,7 +170,9 @@ export function duplicate(id: string, copySuffix = '(副本)'): DataRule | n
const rules = getAll();
rules.unshift(newRule);
setAll(rules);
if (!setAll(rules)) {
return null;
}
return newRule;
}
@@ -267,11 +274,13 @@ export function clear(): void {
/**
* 保存所有规则到存储
*/
function setAll(rules: DataRule[]): void {
function setAll(rules: DataRule[]): boolean {
try {
localStorage.setItem(STORAGE_KEY, JSON.stringify(rules));
return true;
} catch (error) {
console.error('[ruleStorage] 保存规则失败:', error);
return false;
}
}