【发布时间】:2020-03-26 21:15:55
【问题描述】:
我需要做这些事情:
- 从远程服务器中删除项目
- 如果成功,从本地存储中删除项目
- 如果成功,从远程服务器重新加载项目
现在我有了这段代码,但它运行不好,因为第三步没有运行。
delete(model: T, paginate: PaginateInterface): Observable<any> {
return this.remoteStorageService.delete(model).pipe(map((resultDelete: boolean) => {
if (resultDelete) {
this.localStorageService.delete(model);
return this.remoteStorageService.getAll().pipe(map( (resultGetAll: PaginateInterface) => {
return resultGetAll;
}));
}
return paginate;
}));
}
我尝试使用 RxJS 的 switchMap 功能,但我完全迷路了。
如何运行一个函数取决于 observable 的结果,然后另一个 observable 返回结果?
【问题讨论】:
-
您的 api 是否返回布尔值?您可以添加您尝试使用 switchMap 的代码吗?如果您的 api 失败,它不会返回错误响应状态代码 (500, 400 etcc...) 吗?
-
this.localStorageService的返回类型是什么? -
是的,实现取决于删除操作不成功时服务器返回的内容(错误通知是 400?代码还是 200,里面有一些对象?)
-
@Munzer remoteStorageService 处理所有错误。在节目的这一点上,这是不必要的。
-
@Picci
this.localStorageService.delete()是一个 void 函数 - 它处理自身内部可能出现的错误。