在scala中,存在Futures的概念,其中值在将来准备好时将被保存。我试图找到类似的东西。
例如,我希望访问" user"数据。当我第一次访问它时,我想向服务器发送请求以获取数据,但是对于所有后续访问,我希望能够使用存储的值。
以下代码尝试实现类似的功能。它不保证对服务器的调用只会发生一次。
道歉,以下是TypeScript:
class AuthenticationService {
http: Http = Some Http Helper...
user: Observable<User> = this.http.get("www.example.com/logged-in-user")
.map(data => {
let userObject = data.json().user
this.user = Observable.of(userObject)
return userObject
})
}
有更好的方法吗?
答案 0 :(得分:2)
如果我理解正确,您要搜索的是Rx.BehaviorSubject
。
它将存储最后一个值并发送给任何未来的订阅者:
import Rx from 'rxjs/Rx'; // just for development, use a more specific when done
class AuthenticationService {
http: Http = Some Http Helper...
user: Observable<User> = this.http.get("www.example.com/logged-in-user")
.map(data => {
let userObject = data.json().user
this.user = new Rx.BehaviorSubject(userObject)
return userObject
})
}
仅功能的一个例子:
/* Initialize with initial value of 42 */
var subject = new Rx.BehaviorSubject(42);
function subsc(title) {
subject.subscribe(
(x) => console.log(title + ' Next: ' + x.toString()),
(err) => console.log(title + ' Error: ' + err),
() => console.log(title + ' Completed')
);
}
subsc("1st"); // Initial Next: 42
subsc("2nd"); // Initial Next: 42
subject.next(56);
subsc("3rd"); // Initial Next: 56
subject.complete();