combineLatest 与 BehaviourSubject.asObservable 导致流是预期的错误
combineLatest with BehaviourSubject.asObservable causing stream was expected error
我正在尝试将 combineLatest 与 BehaviourSubject.asObservable 一起使用,但出现此错误:
TypeError: You provided 'function () {
return this.ctaButtonSpinnerTriggered.asObservable();
}' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
private ctaButtonSpinnerTriggered: BehaviorSubject<
boolean
> = new BehaviorSubject(false);
public isCtaButtonSpinnerTriggered(): Observable<boolean> {
return this.ctaButtonSpinnerTriggered.asObservable();
}
public setCtaButtonSpinnerTriggered(isDisabled: boolean): void {
this.ctaButtonSpinnerTriggered.next(isDisabled);
}
public get showCtaSpinner(): Observable<boolean> {
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered,
]).pipe(
map(
([ctaDisabled, isCtaButtonSpinnerTriggered]: [
boolean,
boolean
]) => {
console.log(
!ctaDisabled,
isCtaButtonSpinnerTriggered,
'ctaDisabled + isCtaButtonSpinnerTriggered'
);
return !ctaDisabled && isCtaButtonSpinnerTriggered;
}
)
);
}
知道 combineLatest 与 BehaviourSubject 的正确实现是什么吗?
改变
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered,
])
到
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered(), // note the parentheses here
])
因为它不是 getter 函数。
要使您的 属性 成为 getter/setter,请将它们更改为:
private ctaButtonSpinnerTriggered: BehaviorSubject<
boolean
> = new BehaviorSubject(false);
public get isCtaButtonSpinnerTriggered(): Observable<boolean> {
return this.ctaButtonSpinnerTriggered.asObservable();
}
public set isCtaButtonSpinnerTriggered(isDisabled: boolean): void {
this.ctaButtonSpinnerTriggered.next(isDisabled);
}
并将其用作
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered,
])
我正在尝试将 combineLatest 与 BehaviourSubject.asObservable 一起使用,但出现此错误:
TypeError: You provided 'function () {
return this.ctaButtonSpinnerTriggered.asObservable();
}' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable.
private ctaButtonSpinnerTriggered: BehaviorSubject<
boolean
> = new BehaviorSubject(false);
public isCtaButtonSpinnerTriggered(): Observable<boolean> {
return this.ctaButtonSpinnerTriggered.asObservable();
}
public setCtaButtonSpinnerTriggered(isDisabled: boolean): void {
this.ctaButtonSpinnerTriggered.next(isDisabled);
}
public get showCtaSpinner(): Observable<boolean> {
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered,
]).pipe(
map(
([ctaDisabled, isCtaButtonSpinnerTriggered]: [
boolean,
boolean
]) => {
console.log(
!ctaDisabled,
isCtaButtonSpinnerTriggered,
'ctaDisabled + isCtaButtonSpinnerTriggered'
);
return !ctaDisabled && isCtaButtonSpinnerTriggered;
}
)
);
}
知道 combineLatest 与 BehaviourSubject 的正确实现是什么吗?
改变
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered,
])
到
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered(), // note the parentheses here
])
因为它不是 getter 函数。
要使您的 属性 成为 getter/setter,请将它们更改为:
private ctaButtonSpinnerTriggered: BehaviorSubject<
boolean
> = new BehaviorSubject(false);
public get isCtaButtonSpinnerTriggered(): Observable<boolean> {
return this.ctaButtonSpinnerTriggered.asObservable();
}
public set isCtaButtonSpinnerTriggered(isDisabled: boolean): void {
this.ctaButtonSpinnerTriggered.next(isDisabled);
}
并将其用作
return combineLatest([
this.ctaDisabled,
this.isCtaButtonSpinnerTriggered,
])