2016-11-20 40 views
27

Theo các chức năng this artcle, onCompleteonError của subscribe loại trừ lẫn nhau.Có thể quan sát Cuối cùng trên Đăng ký

Có nghĩa là onError hoặc onComplete sự kiện sẽ kích hoạt trong subscribe của tôi.
Tôi có một khối logic cần được thực thi cho dù tôi có gặp lỗi hay tôi đã hoàn thành thành công thông tin của mình.

Tôi đã tra cứu một số thứ như finally in python, nhưng tất cả những gì tôi tìm thấy là finally cần được đính kèm với tôi có thể quan sát được.

Nhưng tôi chỉ muốn làm logic đó khi tôi đăng ký và sau khi luồng kết thúc, cho dù thành công hay có lỗi.

Bất kỳ ý tưởng nào?

Trả lời

40

Tôi nghĩ rằng nhà điều hành finally() thực sự chính xác. Bạn nói:

làm logic mà chỉ khi tôi đăng ký, và sau khi Luồng đã kết thúc

mà không phải là một vấn đề tôi nghĩ. Bạn có thể có một source và sử dụng finally() trước khi đăng ký nếu bạn muốn. Bằng cách này bạn không cần thiết để luôn sử dụng finally():

let source = Observable.create(observer => { 
    observer.next(1); 
    observer.error('error message'); 
    observer.next(3); 
    observer.complete(); 
}).publish(); 

source 
    .finally(() => console.log('Finally callback')) 
    .subscribe(
    value => console.log('#1 Next:', value), 
    error => console.log('#1 Error:', error), 
    () => console.log('#1 Complete') 
); 

source 
    .subscribe(
    value => console.log('#2 Next:', value), 
    error => console.log('#2 Error:', error), 
    () => console.log('#2 Complete') 
); 

source.connect(); 

in này để an ủi:

#1 Next: 1 
#2 Next: 1 
#1 Error: error message 
Finally callback 
#2 Error: error message 
+0

vui tôi không nghĩ về điều đó, nhờ –

+0

.finally() làm việc cho tôi . Cảm ơn bạn. – STEEL

+1

Thú vị rằng nó là loại mô hình trái ngược của Promises, trong đó phương thức 'finally()' được nối đầu tiên, và thuê bao buộc phải vượt qua/thất bại. – BradGreens

Các vấn đề liên quan