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'方法中订阅。我想你只是想在最后;-) –