combineLatest(data$, order$).subscribe(([data, order]: any) => {
if (order && data) {
this.setData(data);
this.setOrder(order);
}
});
當前的場景是——我們等待data$和order$回傳 observables-data 和 order,并使用data和order執行兩個方法—— this.setData(data)和 this.setOrder(order);
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);
}
先感謝您。
uj5u.com熱心網友回復:
如果你使用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);
});
skipUntil運算子使 observable 流跳過值的發射,直到傳入的 observable 發射第一個值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443636.html
標籤:有角度的 rxjs ngrx rxjs-observables rxjs-pipeable-operators
上一篇:如何將資料從組件傳遞到服務,以發出新的http請求?
下一篇:查找元素符號從0變為1的索引
