2016-08-31 13 views
1

以下のコードに似たようにするにはどうすればよいですか?rxjs @ 5で非同期パイプを作る方法は?

.map(async request => await asyncRequest(request)) 

イベントデータを収集してリクエストオブジェクトを作成するをクリックします。 次に、.next(request)を呼び出します。どうすれば[オブジェクトの約束]とjsonを得ることができますか?

let a = Rx.Observable.create(observer => { 
    Rx.Observable.fromEvent(document, 'click') 
    .do(() => observer.next()) 
    .subscribe(result => console.log(`[a] complete`), error => console.log(`a error: ${error}`)); 
}); 


function asyncRequest(request) { 
    return Rx.Observable.create(observer => { 
    new Promise((resolve, reject) => { 
     setTimeout(() => resolve('response'), 1000); 
    }) 
    }) 
} 

a 
    .map(request => asyncRequest(request)) 
    .do(json => console.log(json)) // to get json 
    .subscribe(result => console.log(`complete: ${result}`)) 

答えて

1

あなたはflatMap代わりのmap

let a = 
    Rx.Observable.fromEvent(document, 'click') 
    //Console loggin is a side effect, so make it the do instead of 
    //wrapping the Observable 
    .do(_ => console.log(`[a] complete`), 
     error => console.log(`a error: ${error}`)); 


function asyncRequest(request) { 
    //This will actually handle the result of the Promise 
    return Rx.Observable.defer(() => 
    new Promise((resolve, reject) => { 
     setTimeout(() => resolve('response'), 1000); 
    }) 
); 
} 

a 
    //Kicks off an async request each time an event comes in 
    //and then flattens the response into the stream. 
    .flatMap(asyncRequest) 
    .do(json => console.log(json)) // to get json 
    .subscribe(result => console.log(`complete: ${result}`)) 
を使用する必要があります
関連する問題