在Angular 2中的Observable.prototype.subscribe中完成回调

时间:2016-05-16 23:28:44

标签: javascript angularjs angular rxjs rxjs5

完整的回调无法按预期工作。让我解释一下:

查看此图片,请注意complete方法中的subscribe回调。 只有在调用complete时才会调用此observerOrNext函数。发生某些错误时,不会调用complete。这是正确的?还有另一种获取回调的方法,在进程完成时始终会调用它?

enter image description here

示例:

成功时:

this.getData(params)
    .subscribe(
        successData => {
            // this is called
        },
        error => {
            // this is not called. Ok!
        },
        () => { // when complete
            // this is called, ok!
        }
    );

出错时:

this.getData(params)
    .subscribe(
        successData => {
            // this is not called, ok!
        },
        error => {
            // this is called. Ok! Yeah!
        },
        () => { // when complete
            // this is not called, why god??
        }
    );

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是.finally功能。

  

在源可观察序列正常或异常终止后调用指定的操作。有一个名为finallyAction的别名,用于浏览器< IE9

以下是一个例子: https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/finally.md

答案 1 :(得分:0)

对于 rxjs 6 使用 pipe/finalize

import { finalize } from 'rxjs/operators';

this.getData(params)
  .pipe(
    finalize(() => {
      // this is called on both success and error
    })
  )
  .subscribe(
    (successData) => {  },
    (err) => {  }
  );