Javascript 获取行为主体的值

Javascript 获取行为主体的值,javascript,angular,firebase,rxjs,angularfire2,Javascript,Angular,Firebase,Rxjs,Angularfire2,我试图获取行为主体的值。返回值,但如何在返回true/false语句中使用它们 BehaviorSubject {_isScalar: false, observers: Array(0), closed: false, isStopped: false, hasError: false, …} closed:false hasError:false isStopped:false observers:[Subscriber] thrownError:null value:(...) _isSc

我试图获取行为主体的值。返回值,但如何在返回true/false语句中使用它们

BehaviorSubject {_isScalar: false, observers: Array(0), closed: false, isStopped: false, hasError: false, …}
closed:false
hasError:false
isStopped:false
observers:[Subscriber]
thrownError:null
value:(...)
_isScalar:false
_value:Array(3)
0:"name@gmail.com"
1:"Bob Smith"
2:{adminUser: false, basicUser: true} length:3
__proto__:Array(0)
__proto__:Subject
我的行为主题已发送以下内容。为什么我一开始就变空了

user: BehaviorSubject<User> = new BehaviorSubject<User>(null); 

我运行console.log,该值首先显示为null,因此有一个错误响应。然后它再次运行并成为现实。这一切都发生在最初运行页面之后。我需要我的检查值在加载时为真

您应该能够使用.getValue()调用BehaviorSubject的名称 比如:

let x = new BehaviorSubject<any>;
...
x.getValue()
设x=新行为主体;
...
x、 getValue()

您应该能够使用.getValue()调用BehaviorSubject的名称 比如:

let x = new BehaviorSubject<any>;
...
x.getValue()
设x=新行为主体;
...
x、 getValue()

我已经正式回答了我的问题。也许这不是正确的方法,但确实有效

来自rxjsBehaviorSubject生成初始值和当前值 在那个特别的时刻。现在,如果您想绕过初始值(在我的例子中为空),那么在订阅之前,请确保使用

在本例中,我使用它跳过第一个值skip(1)


我已经正式回答了我的问题。也许这不是正确的方法,但确实有效

来自rxjsBehaviorSubject生成初始值和当前值 在那个特别的时刻。现在,如果您想绕过初始值(在我的例子中为空),那么在订阅之前,请确保使用

在本例中,我使用它跳过第一个值skip(1)


我也有同样的问题。我总是得到我的初始值(它是空的),从来没有发出的值
skip()
-方法对我没有帮助,但是
skipWhile()
-方法就是诀窍

behaviorSubject.pipe(
skipWhile(value=>!value),//跳过空值
取(1))//在我的例子中,我只需要一次值
.subscribe(value=>doYourWork());

编辑 如果可能的话,最好切换到大小为1的
ReplaySubject
。您不再需要
.skip()
.skipwhile()

这里有一个例子

// replaySubjects have no initial value
let subject = new ReplaySubject<YourType>(1); 


subject.pipe(take(1)).
    // no null-values anymore!
    .subscribe(value => doYourStuff());

// subscribers dont get any value until a next()-call
subject.next(youValue);

// and you can hide some methods, when you declare it as observable or subject
// hide replaySubject specific informations
let publicSubject: Subject<YourType> = subject;
// hide subject informations (like .next())
let publicSubject2: Observable<YourType> = subject;
//ReplaySubject没有初始值
let subject=新的ReplaySubject(1);
主题:管道(取(1))。
//不再有空值!
.subscribe(value=>doYourStuff());
//订阅服务器在下一次()调用之前不会获得任何值
subject.next(youValue);
//当你声明它为可观察的或主体时,你可以隐藏一些方法
//隐藏replaySubject特定信息
让公共主体:主体=主体;
//隐藏主题信息(如.next())
让公共主体2:可观察=主体;

我也遇到了同样的问题。我总是得到我的初始值(它是空的),从来没有发出的值
skip()
-方法对我没有帮助,但是
skipWhile()
-方法就是诀窍

behaviorSubject.pipe(
skipWhile(value=>!value),//跳过空值
取(1))//在我的例子中,我只需要一次值
.subscribe(value=>doYourWork());

编辑 如果可能的话,最好切换到大小为1的
ReplaySubject
。您不再需要
.skip()
.skipwhile()

这里有一个例子

// replaySubjects have no initial value
let subject = new ReplaySubject<YourType>(1); 


subject.pipe(take(1)).
    // no null-values anymore!
    .subscribe(value => doYourStuff());

// subscribers dont get any value until a next()-call
subject.next(youValue);

// and you can hide some methods, when you declare it as observable or subject
// hide replaySubject specific informations
let publicSubject: Subject<YourType> = subject;
// hide subject informations (like .next())
let publicSubject2: Observable<YourType> = subject;
//ReplaySubject没有初始值
let subject=新的ReplaySubject(1);
主题:管道(取(1))。
//不再有空值!
.subscribe(value=>doYourStuff());
//订阅服务器在下一次()调用之前不会获得任何值
subject.next(youValue);
//当你声明它为可观察的或主体时,你可以隐藏一些方法
//隐藏replaySubject特定信息
让公共主体:主体=主体;
//隐藏主题信息(如.next())
让公共主体2:可观察=主体;

.value()应该这样做。当我尝试获取收到的值为null时,value()应该这样做。我以前读过to do.getValue(),但总是接收null。如果我接受BehaviorSubject并订阅它,那么我将得到null,然后是值。为什么我先得到空值?用户:BehaviorSubject=新的BehaviorSubject(null);//用户的行为角色。@这是因为您已将其初始化为null,并且behavior Subject将始终返回初始值或Subscription上的当前值。只有这样才能获取当前值而不是初始值。我有一个使用route guards的角度导航,当我点击导航进入页面时,它首先加载初始值,而不是当前值。当我尝试获取接收到的值为null时,我使用了skip()rxjs运算符。我以前读过to do.getValue(),但总是接收null。如果我接受BehaviorSubject并订阅它,那么我将得到null,然后是值。为什么我先得到空值?用户:BehaviorSubject=新的BehaviorSubject(null);//用户的行为角色。@这是因为您已将其初始化为null,并且behavior Subject将始终返回初始值或Subscription上的当前值。只有这样才能获取当前值而不是初始值。我有一个使用route guards的角度导航,当我点击导航进入页面时,它首先加载的是初始值,而不是当前值。我使用了skip()rxjs操作符,你能回答这个问题吗?你是说我吗?查一下问题号码哦上帝。下次你能把问题的链接复制一下吗你能回答这个问题吗?你是说我吗?查一下问题号码哦上帝。下次你能把问题的链接复制一下吗D
// replaySubjects have no initial value
let subject = new ReplaySubject<YourType>(1); 


subject.pipe(take(1)).
    // no null-values anymore!
    .subscribe(value => doYourStuff());

// subscribers dont get any value until a next()-call
subject.next(youValue);

// and you can hide some methods, when you declare it as observable or subject
// hide replaySubject specific informations
let publicSubject: Subject<YourType> = subject;
// hide subject informations (like .next())
let publicSubject2: Observable<YourType> = subject;