【发布时间】:2018-12-07 14:21:57
【问题描述】:
我正在最新的 Angular 6 上构建一个架构,并且来自 AngularJS,有一些我无法解决的问题:HTTP 请求的基本处理。
所以,为了这个问题,假设我想要一个 observable。因为它似乎是 Angular 的未来。
我在 AngularJS 中使用了非常优雅的东西:
service.getAll()
.then(onSuccess) // I process the data
.catch(onError) // I do whatever needed to notify anyone about the issue
.finally(onFinally); // I stop the loading spinner and other stuff
现在在 Angular 6/RxJS 6 中,我不明白为什么一切都如此复杂而且看起来不正确。
我可以找到两种方法来做与上面相同的事情:
-
完整的管道
this.service.getAll() .pipe( map((data) => this.onSuccess(data)), catchError(error => of(this.handleError(error))), finalize(() => this.stopLoading()) ) .subscribe();
由于我们必须使用管道进行最终确定,我不妨对所有内容都使用管道,我认为最好让所有内容都按相同的顺序排列。但是现在我们必须抛出一些东西,叫做“of”(不太容易理解),我不喜欢这样。
-
半管 所以我尝试了另一个想法,只使用我需要的管道(最终确定)并保留订阅回调。
this.service.getAll() .pipe( finalize(() => this.stopLoading()) ) .subscribe( (data) => this.onSuccess(data), (error) => this.handleError(error) );
但是,好吧。是不是有点落后了?我们仍然有没有实际名称的回调,我们在读取处理和错误之前完成。很奇怪。
所以有些东西我绝对不明白。而且我在网上找不到与这个基本问题相关的任何内容。您要么有人想要“成功并最终”,要么有人想要“成功和错误”,但没有人想要其中的 3 个。 也许我太老了,我不了解新的最佳实践(如果是这样,请教育我!)。
我的需求很简单:
1. 我想处理从服务获得的数据
2. 我想得到错误以便显示给用户
3.我想在调用之前停止我刚刚启动的加载微调器,或者在第一个完全成功或错误后再次调用(我真的想要一个finally)
您如何使用 observable 处理基本的 HTTP 调用?
(我不想要任何.toPromise,拜托,我想了解如何处理新东西)
【问题讨论】:
标签: angular rxjs observable finally