2016-12-19 25 views
1

私は約束を返す関数を呼び出し、その結果を観測可能な値を返す別の関数に渡したいと思う。私はこれを順番に行い、観察可能な最終結果を得る必要があるので、私は購読することができます。例えばRxjs - 約束を呼び出し、順番に観測可能

// Call a function and return a Promise 
myPromise() {} 

// Make an http call and return an Observable 
myObservable() {} 

// Call myPromise() then call myObservable() and return 
// an Observable with the result 
// *I don't know how this function should be* 
myFunction() {} 

// Subscription 
myFunction().subscribe(
    result => console.log(result), 
    error => console.log(error), 
() => console.log('completed')); 

私はこれをどのように行うことができますか?

+0

何が問題ですか?たぶん私はあなたの質問を誤解した、それはかなり簡単です。 'promiseReturningFunction()。then(observableReturningFunction).subscribe(observer)'そして 'promiseReturningFunction'を呼び出す前に、それが最初に呼び出されたことを確認してください。私はここで何が欠けていますか? – user3743222

+0

私たちがあなたを助けるためにコードサンプルをお持ちですか? – thalesmello

+0

一度だけ電話する必要はありません。小さなサンプルコードで質問を編集しました。 –

答えて

1

次の操作を行うことができます:

let stream$ = Observable.defer(() => Observable.fromPromise(myPromise())) 
    .flatMap(promiseResult => myObservable(promiseResult)); 

stream$.subscribe(obsResult => console.log(obsResult)); 

.deferは、すべてが初期化時に一度だけ加入し、そしてないとあなたの約束 - メソッドが呼び出されることを保証するために必要とされます。

+0

両方のエラーをどうやって管理できますか? –

+0

previouseエラー – olsn

+0

を処理するflatMapの後に.catch(...)を追加するか、.subscribeで2番目の引数を使用するだけで、スローされたエラーも受け取ります – olsn

関連する問題