3 回答

TA貢獻1818條經驗 獲得超7個贊
combineLatest(observables, resultSelector)
通常可以替換為
combineLatest(observables).pipe(
map(resultSelector)
)
但這是否以相同的方式工作取決于您resultSelector接受的參數。combineLatest(observables)發出一個數組,當你使用已棄用的 resultSelector 時,RxJs 會自動傳播這個數組。
return isArray(args) ? fn(...args) : fn(args); // fn is your resultSelector
AsObject.assign根據您提供的是數組還是多個值返回不同的值,您必須手動展開數組。
combineLatest(observables).pipe(
map(items => Object.assign({}, ...items))
)

TA貢獻1784條經驗 獲得超9個贊
結果選擇器只是一個可用于更改輸出形狀的函數。
因此,您可以簡單地省略結果選擇器參數并使用地圖來轉換形狀:
this.params = combineLatest(
this._route.pathFromRoot.map(route => route.params)
).pipe(
map(Object.assign)
);
結果選擇器的一個常見用途(對我來說)是將數組作為具有命名屬性的對象返回,所以像這樣:
// 舊方法
myObs$ = combineLatest(
[src1$, src2$, src3$],
([src1, src2, src3]) => ({src1, src2, src3})
);
// 新方法
myObs$ = combineLatest(src1$, src2$, src3$)
.pipe(
map(([src1, src2, src3]) => ({src1, src2, src3}))
);

TA貢獻2019條經驗 獲得超9個贊
pipe
結果并改用map
運算符,例如:
combineLatest(this._route.pathFromRoot.map(route?=>?route.params)).pipe(? ?map(Object.assign) );
此外,不確定代碼的意圖,因為它似乎正在調用Object.assign
一個新的數組引用,不確定為什么這是必要的,但這并不完全相關。
添加回答
舉報