我正在嘗試解決一個問題。目前,我正在打開一個模態,但為此我需要 3 條路線可觀察值的組合。所以,我的代碼邏輯是這樣的:
combineLatest([obs1, obs2, obs3])
.subscribe(([s1, s2, s3]: any) => {
openModal();
});
由于它將被執行 3 次,我的模態也將被打開 3 次,但我不希望它這樣做,但我知道這是預期的行為。
所以,為此,我實施的糟糕解決方案是使用flag這樣的:
let shouldOpen = true;
combineLatest([obs1, obs2, obs3])
.subscribe(([s1, s2, s3]: any) => {
if(shouldOpen) {
shouldOpen = false;
openModal();
}
});
但當然,這不是一個好的解決方案。
所以,問題是,有沒有辦法讓我繼續使用combineLatest但只執行一次?
這里有一個Stackblitz,如果你想嘗試與combineLatest。
注意:我不能使用
forkJoin或zip,我已經嘗試過這些。
uj5u.com熱心網友回復:
因為你不能使用forkJoin(這是正確的答案),跳過前兩個排放combineLatest
combineLatest([obs1, obs2, obs3])
.pipe(skip(2))
.subscribe(([s1, s2, s3]: any) => {
openModal();
});
您也可以使用skipWhile跳過,直到所有三個都被定義:
.pipe(skipWhile(([s1, s2, s3]) => s1===undefined || s2 === undefined || s3===undefined))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/330840.html
下一篇:定義屬性的粗箭頭
