我有一个Angular 2服务:
import {Storage} from './storage';
import {Injectable} from 'angular2/core';
import {Subject} from 'rxjs/Subject';
@Injectable()
export class SessionStorage extends Storage {
private _isLoggedInSource = new Subject<boolean>();
isLoggedIn = this._isLoggedInSource.asObservable();
constructor() {
super('session');
}
setIsLoggedIn(value: boolean) {
this.setItem('_isLoggedIn', value, () => {
this._isLoggedInSource.next(value);
});
}
}
一切都很好。但是我有另一个不需要订阅的组件,它只需要获取某个时间点的isLoggedIn的当前值。我该怎么做呢?
发布于 2016-05-07 22:56:26
Subject
或Observable
没有当前值。当发出一个值时,它会被传递给订阅者,然后Observable
就会使用它。
如果你想要一个当前值,使用BehaviorSubject
,它就是为这个目的而设计的。BehaviorSubject
保留最后发出的值,并立即将其发送给新订阅者。
它还有一个getValue()
方法来获取当前值。
发布于 2017-04-13 18:42:29
我也遇到过类似的情况,即延迟订阅的用户在主题价值到达后才订阅该主题。
我发现与BehaviorSubject类似的ReplaySubject在这种情况下很有魅力。这里有一个更好的解释的链接:http://reactivex.io/rxjs/manual/overview.html#replaysubject
发布于 2019-01-27 18:38:18
const observable = of('response')
function hasValue(value: any) {
return value !== null && value !== undefined;
}
function getValue<T>(observable: Observable<T>): Promise<T> {
return observable
.pipe(
filter(hasValue),
first()
)
.toPromise();
}
const result = await getValue(observable)
// Do the logic with the result
// .................
// .................
// .................
你可以在这里查看关于如何实现它的完整文章。https://www.imkrish.com/blog/development/simple-way-get-value-from-observable
https://stackoverflow.com/questions/37089977
复制相似问题