报错:类型‘void’不存在‘toPromise’属性,如何解决删除后列表更新问题?
解决方案
问题核心是Delete方法未返回异步操作的可等待对象,导致getList会在删除请求完成前执行;同时因为原Delete返回void,调用.toPromise()自然会报错。
步骤1:修改Delete方法,返回Observable
让Delete返回服务调用的Observable,这样我们可以后续等待异步操作完成:
Delete(data: any) { this.param = { // 你的参数配置 }; // 返回Observable,并在操作完成后弹出成功提示 return this.Service.delete(this.param).pipe( tap(() => { this.toastr.success('deleted successfully'); }) ); }
步骤2:等待删除完成后再更新列表
在确认删除的回调中,用await配合RxJS的firstValueFrom(RxJS 7+推荐)等待删除请求结束,再执行列表刷新:
// 先导入firstValueFrom import { firstValueFrom } from 'rxjs'; delete(data: any) { Swal.fire({ title: 'Are you sure?', text: 'You want to delete!', showCancelButton: true, confirmButtonText: 'Yes, Delete it!', cancelButtonText: 'No, keep it' }).then(async (result) => { if (result.isConfirmed) { // 等待删除请求完成 await firstValueFrom(this.Delete(data)); // 再更新列表 this.getList(); } }); }
如果你的项目使用RxJS 6及以下版本,可改用.toPromise()替代firstValueFrom:
await this.Delete(data).toPromise();
关键说明
- 原
Delete方法无返回值,this.Delete(data)得到的是void,这就是.toPromise()报错的原因; - 修改后
Delete返回Observable,通过firstValueFrom或.toPromise()将其转为Promise,配合await就能确保删除操作完成后再执行列表刷新。
内容的提问来源于stack exchange,提问作者user3653474
相关产品推荐
相关产品推荐

