我知道 Observables 需要一些時間來獲取資料,而 javascript 會繼續運行其他代碼,這讓我很困擾。
我在我的 Angular 專案中使用了 ngrx。在這里,我正在嘗試從運行良好的商店中獲取一些資料。然后,我將此資料流轉換string[]為也可以正常作業的資料流。用這個string[]我subscribe來觀察這個。在訂閱中,我嘗試將值分配給其他名為filterSizeValues.
這里,問題來了。如果我console.log這個filterSizeValues最初我和空陣列。當 observable 完成時,他的作業filterSizeValues變數會被資料填充。
但我filterSizeValues最初不能努力將變數設為空陣列。我能做什么?
我已經在互聯網上搜索了解決方案,但沒有任何解決方案。
請幫幫我。非常感謝。
這是我的代碼;
this.sizeTargetingStore$.dispatch(SizeTargetingActions.getSizeTargeting({
campaignId: this.campaignId,
lineItemId: this.lineItemId
}));
在這里,我正在訪問商店以獲取資料。
this.sizeTargeting$
.pipe(switchMap(sizes=>{
let temporary:string[] = [];
sizes.forEach(eachSize=>{
temporary.push(eachSize.name);
})
this.filterSizeValues$ = of(temporary);
return this.filterSizeValues$;
}))
.subscribe(size_name=>{
this.filters.set('size_name', size_name);
})
在這里,我正在嘗試set過濾值。
我也嘗試過這種方式。
this.sizeTargeting$
.pipe(switchMap(sizes=>{
let temporary:string[] = [];
sizes.forEach(eachSize=>{
temporary.push(eachSize.name);
})
this.filterSizeValues$ = of(temporary);
return this.filterSizeValues$;
}))
.subscribe(size_name=>{
this.filterSizeValues = size_name
})
this.filters.set('size_name', this.filterSizeValues);
但是所有方式過濾器都設定為空陣列。任何人都可以幫助我嗎?
uj5u.com熱心網友回復:
通常,當我訂閱我正在等待回傳的內容時,我會設定一個主題:
private componentDestroyed$ = new Subject<void>();
然后在 Observable 管道和訂閱中,我這樣做:
this.sizeTargeting$
.pipe(takeUntil(this.componentDestroyed$))
.subscribe((sizes: YourTypeHere[]) => {
if(sizes) {
//Do what I need to do with my sizes here, populate what I need,
//dispatch any other actions needed.
}
})
uj5u.com熱心網友回復:
據我了解,您有兩種可能性,要么過濾掉空值,要么跳過第一個值。您可以分別使用filter和skip rxjs運算子來執行此操作。
此外,我認為您在濫用switchMap運算子,因為您沒有在您的內部使用異步操作,switchMap我們可以使用map運算子,所以下面我有一個簡化版本的代碼,您可以使用 2 個選項來解決您的問題。
選項1:
this.sizeTargeting$.pipe(
filter(sizes => sizes.length > 0), // filter out empty array values
map(sizes => sizes.map(size => size.name)) // perform your remap
).subscribe(sizes => {
this.filterSizeValues = size_name; // Only arrays with values will reach this step
});
選項 2:
this.sizeTargeting$.pipe(
skip(1), // skip the first value
map(sizes => sizes.map(size => size.name)) // perform your remap
).subscribe(sizes => {
this.filterSizeValues = size_name; // Only arrays with values will reach this step
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/421053.html
標籤:
上一篇:Rails中的兩點運算子是什么?
下一篇:使用Angular的路由問題
