【问题标题】:Subscribe method on http.get observable: what is the third argument?http.get observable 上的订阅方法:第三个参数是什么?
【发布时间】:2017-05-29 17:42:45
【问题描述】:

我在 Angular 2 最终版本中对 observable(http.get 的结果)使用 subscribe 方法。虽然 subscribe 方法的第一个参数是从后端获取数据的函数,第二个是在错误时执行的函数(如状态 http 代码 404),我不明白第三个参数/函数的含义。

希望它在请求结束时执行总是(成功或错误),我删除/停止其中的加载指示器,但第三个函数不会在错误时调用。

【问题讨论】:

    标签: angular angular2-services


    【解决方案1】:

    每个序列的第三个参数是完整的处理程序。它在没有参数的情况下被调用,只是通知序列完成。

    Observable.from([1,3]).subscribe(
      (v => console.log('value: ', v)),
      (e => console.log('error: ', e)),
      (() => console.log('the sequence completed!'))
    

    将打印:

    值:1

    值:2

    序列完成

    【讨论】:

      【解决方案2】:

      第三个回调在 observable 完成时被调用。这意味着 observable 不会再发出任何事件。 目前,Http.xxx 调用返回的 observables 只发出一个事件并在之后完成,因此同时调用第一个和第三个回调(一个接一个)但Http 可能会更改为最终发出多个事件, 然后为每个事件调用第一个回调,第三个回调在最后一个事件之后调用一次。

      【讨论】:

      • 所以我可以得到以下之一:1,3 或 2,3,但还是调用了 3?
      • 2 或 3 中的一个应始终在最后一个事件之后调用一次。成功时调用 3,出错时仅调用 2(而不是 3)。
      • 所以我必须停止在 1 和 2 中加载指示器。如何消除这种重复?
      • 您可以使用finally 运算符。这个操作符在任何情况下都会被调用一次(在 2 或 3 之后)。
      • 感谢君特·佐赫鲍尔!有人需要更新这个答案,包括评论中的精确度,因为答案本身并不那么清楚
      猜你喜欢
      • 2017-08-01
      • 2019-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-29
      • 1970-01-01
      相关资源
      最近更新 更多