【发布时间】:2017-05-29 17:42:45
【问题描述】:
我在 Angular 2 最终版本中对 observable(http.get 的结果)使用 subscribe 方法。虽然 subscribe 方法的第一个参数是从后端获取数据的函数,第二个是在错误时执行的函数(如状态 http 代码 404),我不明白第三个参数/函数的含义。
希望它在请求结束时执行总是(成功或错误),我删除/停止其中的加载指示器,但第三个函数不会在错误时调用。
【问题讨论】:
我在 Angular 2 最终版本中对 observable(http.get 的结果)使用 subscribe 方法。虽然 subscribe 方法的第一个参数是从后端获取数据的函数,第二个是在错误时执行的函数(如状态 http 代码 404),我不明白第三个参数/函数的含义。
希望它在请求结束时执行总是(成功或错误),我删除/停止其中的加载指示器,但第三个函数不会在错误时调用。
【问题讨论】:
每个序列的第三个参数是完整的处理程序。它在没有参数的情况下被调用,只是通知序列完成。
Observable.from([1,3]).subscribe(
(v => console.log('value: ', v)),
(e => console.log('error: ', e)),
(() => console.log('the sequence completed!'))
将打印:
值:1
值:2
序列完成
【讨论】:
第三个回调在 observable 完成时被调用。这意味着 observable 不会再发出任何事件。
目前,Http.xxx 调用返回的 observables 只发出一个事件并在之后完成,因此同时调用第一个和第三个回调(一个接一个)但Http 可能会更改为最终发出多个事件, 然后为每个事件调用第一个回调,第三个回调在最后一个事件之后调用一次。
【讨论】:
finally 运算符。这个操作符在任何情况下都会被调用一次(在 2 或 3 之后)。