在谈到Observables(尤其是rxjs)时,"最终"之间有什么区别?和"完成"或者"完成"?
答案 0 :(得分:11)
最终总是在可观察序列终止时发生(包括错误);只有当它没有错误地终止时才会完成。
最后:
在源可观察序列之后调用指定的操作 优雅地或特殊地终止。
https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/finally.md
OnCompleted:
Observable在调用
onNext
之后调用此方法 最后一次,如果没有遇到任何错误。
http://reactivex.io/documentation/observable.html
"完成"不是rx / observables的概念。我刚看到它打印在"完整"的例子中。 /" OnComplete"。
注意:当您致电subscribe
时,语法通常为:
observable.subscribe([observer] | [onNext], [onError], [onCompleted]);
// Like this:
observable.subscribe(
(value) => { ... },
(error) => { ... },
() => { console.log('complete!'); }
);
或
observable.subscribe({
next: x => console.log('got value ' + x),
error: err => console.error('something wrong occurred: ' + err),
complete: () => console.log('done'),
});
而finally
的处理方式如下:
observable.finally(() => { console.log('finally!'); })
.subscribe(...) // you can still call subscribe
答案 1 :(得分:5)
更准确地说,finally()
运算符添加了一个处置程序处理程序。 complete
通知只是在观察者中调用完整的处理程序。
这在实践中意味着什么:
使用finally()
时,将在导致取消订阅的每种情况下调用回调。当观察员收到complete
和error
通知时,以及手动取消订阅时。
complete
或error
个处理程序。只能调用0 - 1
个处理程序,但不能同时调用它们。