2017-01-29 13 views
4

それは次のコードrxjsで観測可能で、互換性がありますか?公式<a href="https://angular.io/docs/ts/latest/tutorial/toh-pt4.html" rel="nofollow noreferrer">angular2 tutorial</a>で

getHeroes(): Promise<Hero[]> { 
    return Promise.resolve(HEROES); 
} 

ngOnInit(): void { 
    this.route.params 
    .switchMap((params: Params) => this.heroService.getHero(+params['id'])) 
    .subscribe(hero => this.hero = hero); 

    console.log(this.route.params); 
    console.log(this.route.params 
    .switchMap((params: Params) => this.heroService.getHero(+params['id']))); 
} 

が含まれている今、私たちは this.heroService.getHero(+params['id'])はここで約束

を返しながらthis.route.paramsは、観測可能に返すことrxjsswitchmap

switchMap(project: function: Observable, resultSelector: function(outerValue, innerValue, outerIndex, innerIndex): any): Observable 
ための署名であることを知っています

最初のパラメータは観測値を出力する関数を取ります。

しかし、上記の例では、実際に約束を出している関数を渡しました。

これらはお互いに互換性がありますか?関数が約束を出力するため

さらにコンソール

console.log(this.route.params 
.switchMap((params: Params) => this.heroService.getHero(+params['id']))); 

出力

AnonymousSubject {_isScalar: false, observers: Array[0], closed: false, isStopped: false, hasError: false…} 

_isScalarは、trueに設定するはずの?多くの場所で

+0

「Observable#fromPromise」([v4 docs](https://github.com/Reactive-Extensions/RxJS/blob/v4.1.0/doc/api/core/operators/frompromise.md)を探している可能性があります。 )、[v5 docs](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#static-method-fromPromise)) – Whymarrh

+0

@Whymarrこのように、例Iでは 'fromPromise'が暗黙的に呼び出されています上記の? – Kevin

答えて

5

、RxJS APIはObservableInputを受け入れ:

観察可能な、約束や配列のような、反復可能なオブジェクトにすることができ
export type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T>; 

あなたの質問に含まれているコードでは、switchMapに渡されたproject関数が約束を返します。

export function switchMap<T, R>(
    this: Observable<T>, 
    project: (value: T, index: number) => ObservableInput<R> 
): Observable<R>; 

switchMap実装は約束が観測可能に変換されていることがわかります。switchMapObservableInput返すproject機能を受け入れるようそれは、大丈夫です。結果、観察内部_isScalarプロパティについて

は、それは約束解決時trueに設定され、解決された値は、観察内に格納されています。私の理解では、RxJSでは、スカラーは放出される値の数を参照するのではなく、前記値が即時放出に利用可能かどうかを参照しています。

関連する問題