2017-10-28 99 views
0

我是一個noobie with observables,我試圖創建一個可觀察的點擊流來忽略雙擊時發生的2個點擊事件,但我得到這個錯誤: -爲什麼我得到緩衝區不是函數錯誤

Unhandled Promise rejection: this.clickStream.buffer is not a function ; Zone: <root> ; Task: Promise.then ; Value: TypeError: this.clickStream.buffer is not a function

,我不明白爲什麼。

的代碼如下: -

import {Component, NgModule} from '@angular/core'; 
import {BrowserModule} from '@angular/platform-browser'; 
import {Subject} from 'rxjs/Subject'; 
import {Observable} from 'rxjs/Observable'; 

@Component({ 
    selector: 'my-app', 
    template: ` 
     <div> 
       <button (click)="clickStream.next(1)">Click me!</button> 
     </div> 
    `, 
}) 
export class App { 
    clickStream: Observable<number> = new Subject<number>(); 
    singleClick; 

    constructor() { 
     this.singleClick = this.clickStream.buffer(() => this.clickStream 
                  .debounce(250)) 
           .map(arr => arr.length) 
           .filter(len => len != 2); 
     this.singleClick.subscribe(console.log.bind(console)); 
    } 
} 

@NgModule({ 
    imports: [ BrowserModule ], 
    declarations: [ App ], 
    bootstrap: [ App ] 
}) 
export class AppModule {} 

我一直在使用Angular + Typescript Demo Plunk對此進行測試。

+0

import'rxjs/add/operator/buffer'; ? – Maxime

+0

通過導入所有操作符來消除錯誤,但是當按下按鈕時沒有任何反應。我有'codepen.io'中的類似的代碼工作正常,我試圖得到這個'angular/typescript'代碼的工作。 – user223364

回答

1

我認爲這個問題是此行

this.singleClick = this.clickStream.buffer(() => this.clickStream.debounce(250)) 

bufferWhen操作員使用的功能,但buffer只使用可觀察:

this.singleClick = this.clickStream.buffer(this.clickStream.debounce(250)) 

LEARN RXJS - buffer

我想知道,如果你即使需要緩衝區,防抖也應該足夠。

另外,有debounce它需要一個功能和debounceTime需要毫秒時間 - 所以你也想改變這一點。

我已經設置了一個CodePen來玩。

+0

當我使用'this.singleClick = this.clickStream.buffer(this.clickStream.debounce(250))'我得到'ERROR TypeError:this.durationSelector.call不是一個函數。 – user223364

+0

該消息將來自反跳錯誤。 –

+0

我切換到使用'debounceTime',它的工作。 – user223364

相關問題