本文详解在前端 Angular 应用中,通过 HTTP DELETE 请求安全执行级联删除的完整逻辑——即删除公司时自动清除其所有分支机构,并妥善处理无关联分支、网络失败等边界场景。
本文详解在前端 angular 应用中,通过 http `delete` 请求安全执行级联删除的完整逻辑——即删除公司时自动清除其所有分支机构,并妥善处理无关联分支、网络失败等边界场景。
在实际业务系统中,删除主实体(如公司)时必须确保其依赖的子实体(如分支机构)一并被清理,否则将导致数据不一致或外键约束异常。上述需求本质上是前端驱动的级联删除逻辑,需兼顾正确性、健壮性与用户体验。
绝不能并发或反序执行删除操作。必须严格遵循「先删除所有关联分支 → 再删除公司」的顺序。若先删公司,分支因 companyId 失效而无法定位,后续清理将失效;若并发调用,可能因数据库事务隔离或网络延迟引发竞态问题。
以下代码采用嵌套订阅 + 状态判断方式,精准应对常见异常:
deleteCompany(id: number) { console.log('Attempting to delete company with ID:', id); // 第一步:尝试删除所有关联分支 this.repository.deleteBranch(`addBranchToCompany?companyId=${id}`).subscribe({ next: () => { console.log('All branches associated with company deleted successfully'); // 分支删除成功后,再删除公司 this.repository.deleteCompany(`addCompany/${id}`).subscribe({ next: () => { console.log('Company deleted successfully'); this.getCompanies(); // 刷新列表 }, error: (err) => { console.error('Failed to delete company after branch cleanup:', err); this.handleError('Company deletion failed', err); } }); }, error: (branchError) => { // 特别处理 404:表示无分支关联,属于合法状态,可直接删公司 if (branchError.status === 404) { console.warn('No branches found for company ID:', id, '— proceeding to delete company only.'); this.repository.deleteCompany(`addCompany/${id}`).subscribe({ next: () => { console.log('Company deleted (no branches existed)'); this.getCompanies(); }, error: (err) => { console.error('Failed to delete company (no branches):', err); this.handleError('Company deletion failed', err); } }); } else { // 其他分支删除错误(如 500、timeout),应中止流程并提示用户 console.error('Unexpected error deleting branches:', branchError); this.handleError('Failed to delete associated branches', branchError); } } });}
级联删除不是简单的多请求拼接,而是包含依赖顺序、错误分类、降级策略与用户体验的完整流程。本文提供的实现既满足功能需求,又覆盖了无关联数据、网络异常等真实场景,可作为 Angular 项目中安全删除模式的参考范式。