如何根据发出的可观察对象执行方法?但一开始,我需要依赖这两个可观察量
How do I execute methods based on which observable is emitted? But at first, I need to depend on both the observables
combineLatest(data$, order$).subscribe(([data, order]: any) => {
if (order && data) {
this.setData(data);
this.setOrder(order);
}
});
目前的情况是-我们等待data$和order$到return observables-数据和顺序,并使用 data 和 order,我们执行两种方法-
this.setData(数据) 和
this.setOrder(顺序);
this.setOrder(order)最初取决于this.setData(data)。
我的期望是,在 ngOnInit 上最初有相同的行为,但是在连续发射可观察对象时(由于状态变化(在 ngOnInit 内触发))-
像-
if change in data${
Dont call this.setOrder(order); call this.setData(data);
}and if change in order${
Dont call this.setData(data); call this.setOrder(order);
}
提前谢谢你。
如果您使用 combineLatest
,那么您会丢失关于哪个 observable 发出了值的信息,因为 combineLatest
将从所有源 observable 发出最新值(假定两者至少发出一个值)。为了克服这个问题,并且仍然保持你的行为(setData 和 setOrder 都可用时),你可以这样做:
const orderData$ = combineLatest(data$, order$).pipe(
filter(([data, order]) => !!data && !!order),
first()
);
data$.pipe(skipUntil(orderData$)).subscribe(data => {
this.setData(data);
});
order$.pipe(skipUntil(orderData$)).subscribe(order => {
this.setOrder(order);
});
orderData$.subscribe(([data, order]) => {
this.setData(data);
this.setOrder(order);
});
The skipUntil
operator 导致 observable 流跳过值的发射,直到传入的 observable 发射第一个值。
combineLatest(data$, order$).subscribe(([data, order]: any) => {
if (order && data) {
this.setData(data);
this.setOrder(order);
}
});
目前的情况是-我们等待data$和order$到return observables-数据和顺序,并使用 data 和 order,我们执行两种方法- this.setData(数据) 和 this.setOrder(顺序);
this.setOrder(order)最初取决于this.setData(data)。
我的期望是,在 ngOnInit 上最初有相同的行为,但是在连续发射可观察对象时(由于状态变化(在 ngOnInit 内触发))-
像-
if change in data${
Dont call this.setOrder(order); call this.setData(data);
}and if change in order${
Dont call this.setData(data); call this.setOrder(order);
}
提前谢谢你。
如果您使用 combineLatest
,那么您会丢失关于哪个 observable 发出了值的信息,因为 combineLatest
将从所有源 observable 发出最新值(假定两者至少发出一个值)。为了克服这个问题,并且仍然保持你的行为(setData 和 setOrder 都可用时),你可以这样做:
const orderData$ = combineLatest(data$, order$).pipe(
filter(([data, order]) => !!data && !!order),
first()
);
data$.pipe(skipUntil(orderData$)).subscribe(data => {
this.setData(data);
});
order$.pipe(skipUntil(orderData$)).subscribe(order => {
this.setOrder(order);
});
orderData$.subscribe(([data, order]) => {
this.setData(data);
this.setOrder(order);
});
The skipUntil
operator 导致 observable 流跳过值的发射,直到传入的 observable 发射第一个值。