我正在构建一个最新的Angular 6架构并且来自AngularJS,这是我无法平衡的事情:HTTP请求的基本处理.
所以,为了这个问题,让我们说我想要一个可观察的.因为它似乎是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
Run Code Online (Sandbox Code Playgroud)
现在在Angular 6/RxJS 6中,我不明白为什么一切都那么复杂,看起来不对.
我可以找到两种方法来做同上面的事情:
满管
this.service.getAll()
.pipe(
map((data) => this.onSuccess(data)),
catchError(error => of(this.handleError(error))),
finalize(() => this.stopLoading())
)
.subscribe();
Run Code Online (Sandbox Code Playgroud)由于我们必须使用管道进行最终化,我不妨使用管道来处理所有事情,我认为最好的做法是让一切都按照相同的顺序排列.但现在我们不得不抛出一些东西,称之为"不太容易理解",我不喜欢这样.
半管所以我尝试了另一个想法,只有我需要的管道(敲定),我保留订阅回调.
this.service.getAll()
.pipe(
finalize(() => this.stopLoading())
)
.subscribe(
(data) => this.onSuccess(data),
(error) => this.handleError(error)
);
Run Code Online (Sandbox Code Playgroud)但是,好吧.是不是有点落后?我们仍然没有实际名称的回调,我们在阅读处理和错误之前完成.奇怪的.
所以我肯定不明白.我在网上找不到任何与此基本问题相关的内容.你要么有人想要"成功又最后",或者"成功和错误",但没有人想要其中的3个.也许我太老了,我不明白最新的最佳实践(如果是这样,请教育我!).
我的需求很简单:
1.我想处理从服务中获取的数据
2.我想得到错误以便显示给用户
3.我想停止在调用之前刚启动的加载微调器,或者一旦第一个完成成功或错误(我真的想要最终),再打一次电话
如何使用observable处理基本的HTTP调用?
(我不想要任何.toPromise,请,我想了解如何处理新的东西)