2017-04-20 13 views
1

setTimeoutからどのように観測値を返しますか?setTimeout(Rxjs)から観測値を返します

send(action):Observable<any>{ 
    if(this.readyState === 0){ 
    setTimeout(() => this.send(action), this.timeout); 
    } 
    else{ 
    // observable is an Rxjs observable.... 
    return this.observable$.take(1); 
    } 
} 

コピーと例を貼り付けます。このような

let observable$ = Rx.Observable.fromArray([1, 2, 3, 4, 5]); 
timeout = 40; 
// if you switch this to 1 it works.. 
readyState = 0; 
setTimeout(() => readyState = 1, 120); 

send().subscribe(c => console.log(c)); 

function send(action){ 
    if(readyState === 0){ 
    setTimeout(() => send(action), timeout); 
    } 
    else{ 
    return observable$.take(1); 
    } 
} 
+1

それは右に感じることはありません。 observableで 'setTimeout'を使います。 '遅延 '演算子はどうですか? – Maxime

答えて

3

は何か(あなたがsetTimeout()から何かを返すことはできません):

send(action):Observable<any>{ 
    if(this.readyState === 0){ 
     return Observable.timer(this.timeout) 
     .mergeMap(() => this.send(action)) 
     .take(1); 
    } 
    else{ 
     // observable is an Rxjs observable.... 
     return this.observable$.take(1); 
    } 
} 
+0

@Ced知っている、私はあなたがこれを既に知っていたと思った:) – martin

関連する問題