从setTimeout(Rxjs)返回可观察值

从setTimeout(Rxjs)返回可观察值

问题描述:

如何从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

给人的感觉并不权使用具有可观察性的'setTimeout'。 'delay'运算符怎么样? – Maxime

像这样的东西(你不能返回从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