【发布时间】:2020-05-31 12:57:15
【问题描述】:
我有以下代码:
someService.subscribeToChanges().subscribe(value => {
const newValue = someArray.find(val => val.id === value.id)
if (newValue) {
if (value.status === 'someStatus') {
someArray.findIndex((a) => a.id === value.id)
someArray.splice(index, 1);
} else {
newValue.status = value.status;
}
} else {
if (value.someProp === 'abc') {
someService.doSomeAsyncStuff().subscribe(data => {
someService.handleData(data);
});
}
}
});
我想保持相同的逻辑,同时避免第二次订阅。
这是我尝试过的代码
sub$ = someService.subscribeToChanges().pipe(switchMap(value => {
const newValue = someArray.find(val => val.id === value.id)
if (newValue) {
if (value.status === 'someStatus') {
someArray.findIndex((a) => a.id === value.id)
someArray.splice(index, 1);
} else {
newValue.status = value.status;
}
} else {
return iif(() => value.someProp === 'ABC', someService.doSomeAsyncStuff);
}
}));
sub$.subscribe(data => someService.handleData(data))
如果iif 条件为真,则此方法有效,但如果为假,它只会停止整个流,而我希望它继续流。
【问题讨论】:
-
应该是
return doSomeStuff();? -
@Andrew 不,不必。这些只是边做的一些操作。
-
问题不清楚且缺少信息。如果
doSomeStuff返回 void 则如果newValue为真,则会出错 -
@AndrewAllen 我更改了代码以显示
doSomeStuff的作用。
标签: javascript angular typescript rxjs