2017-01-19 14 views
2

以下のコードはうまくいきます。コンソールは配列[1, 2]を出力します。同期と非同期の値から配列を作成する

私は(実際のアプリケーションでは、この機能はRxJsライブラリへの参照を持っていない可能性があるため)以下に機能 getSyncFunctionを変更したい
const getAsyncValue =() => { 
    return new Promise(resolve => { 
    setTimeout(() => { 
     resolve(1); 
    }, 1000) 
    }) 
} 
const getSyncValue =() => { 
    return Rx.Observable.of(2); 
} 
const observer = (arrayOfValues) => { 
    console.log(arrayOfValues); 
} 
Rx.Observable.of(getPromise(), getSyncValue()) 
    .concatAll() 
    .toArray() 
    .subscribe(observer) 

const getSyncValue =() => { 
    return 2; 
} 

私はちょうどなしでそれを行う場合その他何かエラーが発生します:

You provided '2' where a stream was expected

このコードには他にどのような変更が必要ですか?たぶん私は使用する演算子をヒント。

答えて

3

問題はgetSyncValue()ではなく、concatAll()にあり、高次のObservablesで動作します。あなたがそれを単に渡すとき2それはエラーをスローします。 Rx.Observable.of(2)を使用しているのは、Observableであり、によって送信される単一の値2を発信するためです。

私はあなたのコードが何をすべきかを知りませんが、たとえば行うことができます:

Rx.Observable.of(getPromise(), getSyncValue()) 
    .map(v => typeof(v) == 'object' ? v : Rx.Observable.of(v)) 
    .concatAll() 
    ... 

しかし、私はあなたがこれよりも、いくつかのより簡単なアプローチを使用することができると思いますので、これを再考することをお勧めします。

+0

あなたが正しいと思います。私はこれを考え直すべきです。とにかく、あなたの時間と知識のために、良い先生、ありがとう! –

関連する問題