如何使用RxJS 5缓冲区功能?
问题描述:
我搜索了很多,试图看d.ts文件,但仍然不明白什么是错的。找不到RxJs5如何使用此功能的示例。如何使用RxJS 5缓冲区功能?
var source = Observable.fromEvent(document.body, 'keypress');
var delayedSource = source.delay(1000);
var obs = source
.buffer(() => {
return delayedSource;
})
.map((clickBuffer) => {
return clickBuffer.length;
});
我正在错误:
错误:(166,15)TS2345:类型的参数“()=>可观察< {}>不是分配给类型 '可观测' 的参数。 类型'()=>可观察< {}>'中缺少属性'_isScalar'。
buffer.d.ts看起来这个,我想我应该明白这一点,但我不能。
import { Observable } from '../Observable';
/**
* Buffers the incoming observable values until the passed `closingNotifier`
* emits a value, at which point it emits the buffer on the returned observable
* and starts a new buffer internally, awaiting the next time `closingNotifier`
* emits.
*
* <img src="./img/buffer.png" width="100%">
*
* @param {Observable<any>} closingNotifier an Observable that signals the
* buffer to be emitted} from the returned observable.
* @returns {Observable<T[]>} an Observable of buffers, which are arrays of
* values.
*/
export declare function buffer<T>(closingNotifier: Observable<any>): Observable<T[]>;
export interface BufferSignature<T> {
(closingNotifier: Observable<any>): Observable<T[]>;
}
这个问题从这个传来: Counting keypresses per second with angular 2 Rxjs
答
基于本杰明Gruenbaum评论,这解决了这个问题:
var source = Observable.fromEvent(document.body, 'keypress');
var delayedSource = source.delay(1000);
var obs = source
.buffer(delayedSource)
.map((clickBuffer) => {
return clickBuffer.length;
})
你传递一个功能,但你应该通过可观察。 –