2017-05-18 20 views
7

Tôi đang thực hiện các chức năng sau trong phần Angular2 của:Làm thế nào để Ngưng observable.timer trong Angular2

export class MypageEditComponent { 

    ngOnInit() { 
    this.timer = Observable.timer(100, 100); 
    this.timer.subscribe(t => { 
     this.setFormData(); 
    } 


    private setFormData() { 
    this.editUserAcountType = this.authStore.registerInfo.account_type; 
    this.editAddress = this.authStore.registerInfo.email; 
    this.editUserName = this.authStore.registerInfo.username; 
    } 
} 

Tôi muốn ngừng lặp lại của Observable.timer lần giá trị được lưu trữ một cách chính xác với setFormData().

Nhưng không biết làm cách nào, vui lòng cho tôi biết.

+0

Vì vậy, bạn muốn dừng lại sau khi thực hiện một lần? Hay bạn đang chờ dữ liệu 'this.authStore.registerInfo' này được đặt ở đâu đó, do đó bạn cần tiếp tục gọi' setFormData' cho đến khi dữ liệu đến? – Saravana

+0

Nếu bạn biết phải mất bao nhiêu thời gian để nhận dữ liệu, tại sao bạn không sử dụng toán tử như độ trễ. – Nugu

+0

Nó không có vẻ là một ý tưởng tốt để làm điều đó. Nếu bạn cung cấp thêm thông tin về những gì bạn đang cố gắng đạt được, có lẽ chúng tôi có thể chỉ một hướng khác để xử lý vấn đề của bạn – Maxime

Trả lời

16

Có đang được cơ bản theo hai cách:

  • gọi unsubscribe() trên đối tượng đăng ký trở về từ các cuộc gọi subscribe() .
  • sử dụng một nhà điều hành

Để chỉ unsubscribe bạn có thể làm điều đó như thế này.

ngOnInit() { 
    this.timer = Observable.timer(100, 100); 
    this.subscription = this.timer.subscribe(t => { 
     this.setFormData(); 
    }); 
} 

private setFormData() { 
    ... 
    this.subscription.unsubscribe(); 
} 

Hoặc bạn có thể sử dụng Tiêu đề để hoàn thành Quan sát qua takeUntil() điều hành:

this.subject = new Subject(); 

ngOnInit() { 
    this.timer = Observable.timer(100, 100); 
    this.timer 
     .takeUntil(this.subject) 
     .subscribe(t => { 
      this.setFormData(); 
     }); 
} 

private setFormData() { 
    ... 
    this.subject.next(); 
} 

Có một cái nhìn những cũng như:

2

bạn có thể sử dụng phương pháp unsubscribe khi bạn muốn dừng timer thể quan sát được như thế này

this.timer = Observable.timer(100, 100); 
this.subscription = this.timer.subscribe(t => { 
    this.setFormData(); 
}); 

............. 
this.subscription.unsubscribe(); 
+0

tại sao rất nhiều downvotes? câu trả lời này có sai không? thậm chí câu trả lời của @martin có cùng mã như tôi đã đăng –

+0

Có. 'unsubscribe' được gọi trên một' Subscription', không phải trên 'Observable'. – cartant

+0

okii nhưng câu trả lời không cung cấp bất kỳ thông tin sai nào đúng không? sau đó bạn phải sử dụng phương thức hủy đăng ký đúng không? hơn tại sao downvote? –

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