在谈到Observables(尤其是rxjs)时,"finally"和"done"或"complete"之间有什么区别?
Ale*_*lor 15
最终总是在可观察序列终止时发生(包括错误); 只有当它没有错误地终止时才会完成.
最后:
在源可观察序列正常或异常终止后调用指定的操作.
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!'); }
);
Run Code Online (Sandbox Code Playgroud)
要么
observable.subscribe({
next: x => console.log('got value ' + x),
error: err => console.error('something wrong occurred: ' + err),
complete: () => console.log('done'),
});
Run Code Online (Sandbox Code Playgroud)
虽然这样finally处理:
observable.finally(() => { console.log('finally!'); })
.subscribe(...) // you can still call subscribe
Run Code Online (Sandbox Code Playgroud)
更准确地说,finally()操作员增加了一个处理手柄.该complete通知只是调用观察员完整的处理程序.
这在实践中意味着什么:
当使用finally()回调时,将在导致取消订阅的每种情况下调用.这是观察者收到的时间complete和error通知,但是当您手动取消订阅时也是如此.
completeerror只有在收到适当的通知时才会调用或处理程序.只能0 - 1调用处理程序,但不能同时调用它们.
| 归档时间: |
|
| 查看次数: |
18814 次 |
| 最近记录: |