2016-10-18 14 views
7

Tôi cố gắng để throttle ngrx cập nhật cửa hàng hành động sự kiện với đoạn mã saurxjs throttle this.durationSelector không phải là một chức năng

import 'rxjs/add/operator/throttle' 
import { Dispatcher, Store } from '@ngrx/store'; 
... 
static get parameters() { 
    return [[Dispatcher]]; 
} 
constructor(actions$) { 
... 

this.actions$ 
    .filter(action => action.type === this.Actions[`LOAD_USERS_REQUEST`]) 
    .throttle(1000 /* ms */) 
    .subscribe(() => 
    ... 
); 

này ném cho tôi một lỗi

at ThrottleSubscriber.tryDurationSelector (throttle.js:80) TypeError: this.durationSelector is not a function

Khi tôi thay .throttle(1000) với .throttle(() => 1000) nó ném một lỗi khác nhau cho thấy rõ ràng ga dự kiến ​​một chức năng, chỉ cần không phải là một trong đó tôi cung cấp. Nhưng tôi tự hỏi tại sao vì các tài liệu tiểu bang ga dự kiến ​​một giá trị số.

https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throttle.md

+0

thêm số này vào của bạn nhập khẩu 'nhập 'rxjs/add/operator/throttle'' –

+0

tất nhiên tôi đã làm điều đó, nếu không nó sẽ bị rơi trước khi nó thậm chí có thể đi vào chức năng ga – select

+0

đã cố gắng throttleWithTimeout thay vì ga? – jmachnik

Trả lời

15

trang tài liệu bạn đang đề cập trên https://github.com/Reactive-Extensions/RxJS có liên quan đến RxJS 4. Kể từ khi bạn đang sử dụng Angular2, bạn đang sử dụng RxJS 5.

hành throttle() hy vọng như là đối số một Quan sát hoặc Promise .

Nhà điều hành throttleTime() mất thời gian đối số theo mili giây.

Vì vậy, bạn nên sử dụng throttleTime(1000).

Lưu ý rằng việc sử dụng .throttle(() => 1000) là rất khác nhau. Bạn chuyển một hàm ẩn danh trả về 1000 thay vì trực tiếp số 1000. Đó là lý do tại sao nó ném một lỗi khác.

+0

Lưu ý bổ sung cho các tìm kiếm: điều này áp dụng tốt cho 'debounce()' và 'debounceTime()', trong RxJS 5. – Jameson

+0

cũng xem https://www.learnrxjs.io/operators/filtering/throttletime.html – Alendorff

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