1
在我的服務中,我定義了一些將使用Http
的方法。來自http方法的返回流
例如:
getUsers(){
this._http.get('someapi')
.map(res=>res.json())
.subscribe(success=>this.users = success; console.log(success))
}
什麼我刨做的,就是建立這種方法,使其返回一個承諾,例如:
this.getUsers().subscribe(success=> DO SOMETHING);
或
this.getUsers().then(DO SOMETHING);
到目前爲止,我得到了這個:
getUsers(){
var getUsersStream = this._http.get('someapi')
.map(res=>res.json())
.subscribe(success=>this.users = success ;console.log('DONE'))
return Observable.of(getUsersStream)
}
這的確讓我做:
this.getUsers().subscribe(success=> console.log('after success'))
然而,當我調試,我可以看到控制檯輸出爲:
after success
DONE
這並沒有真正如同它應該。我在哪裏做錯了?
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
}
}
嗯。那麼訂閱和做什麼有什麼區別? – uksz
它允許執行一些處理而無需訂閱。請參閱此文檔:https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/do.md。 –
就你而言,你並不是真的想在'getUsers'方法中訂閱。我想你只是想在最後;-) –