2016-04-27 6 views
1

私のサービスでは、Httpを使用するいくつかのメソッドを定義しました。例えばhttpメソッドからのストリームを返します

this.getUsers().subscribe(success=> DO SOMETHING); 

または

this.getUsers().then(DO SOMETHING); 
を:私はやって滑走しています何

getUsers(){ 
    this._http.get('someapi') 
     .map(res=>res.json()) 
     .subscribe(success=>this.users = success; console.log(success)) 
} 

、それは例えば、約束を返すように、この方法を設定することです

これまで私はこれを得ました:

01確かに私が行うことができます

:それは、想定のように実際に動作するdoesntの

after success 
DONE 

this.getUsers().subscribe(success=> console.log('after success')) 

しかし、私はデバッグするとき、私はそのコンソール出力がある見ることができます。私はどこで間違いをしていますか?

UPDATE

私はティエリが提供する答えは作品にもかかわらず、私は少しで詳細を私の質問を説明しますね。

私は、次のない私のサービス、方法getUserById()を持っている:

getUserById(someId){ 
    if(this.users.length){ 
     var i = _.findIndex(this.users, {"id":someId}; 
     return this.users[i] 
} else { 
     this.getUsers().then(find the user)//then should be invoked when users are there 
} 
} 

答えて

1

あなたは、この使用する必要があります。

getUsers(){ 
    return this._http.get('someapi') 
    .map(res=>res.json()) 
    .do(success=>console.log('DONE')); 
} 

を問題はObservable.ofは、HTTPリクエストよりも高速であり、あなたが戻るということですObservable.of ...

内の最初のサブスクリプション観察可能なものが以前の観察可能なt実行するには、演算子flatMapを利用する必要があります。ここではサンプルです:

getUserById(someId){ 
    if(this.users.length){ 
    var i = _.findIndex(this.users, {"id":someId}; 
    return Observable.of(this.users[i]); 
    } else { 
    return this.getUsers().do(users => { 
     this.users = users; 
    }).map(users => { 
     var i = _.findIndex(users, {"id":someId}; 
     return users[i]; 
    }); 
    } 
} 
+0

うーん:

getUsers(){ return this._http.get('someapi') .map(res=>res.json()) .do(success=>console.log('DONE')) .flatMap(success => { // return the new observable. For example a second request return this._http.get('someotherapi').map(res => res.json()) }); } 

編集

あなたのサービスのごgetUserById方法については、私はそのような何かをしようとするだろう。では、subscribeとdoの違いは何ですか? – uksz

+0

購読せずに何らかの処理を実行することができます。この文書:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/do.mdを参照してください。 –

+0

あなたの場合、あなたは本当に 'getUsers'メソッドの中で購読したくありません。私はあなたが最後にほしいと思うだけです;-) –

関連する問題