我试图弄清楚如何将一个简单的条件运算实现为可观察的。
this.deactivate$
.pipe(
filter((canDeactivate) => !canDeactivate),
switchMap(() => Observable.of(window.confirm("message")))
);
我想要得到的是:
if (canDeactivate) {
return canDeactivate;
}
else {
return window.confirm("message");
}
上面第一个代码的问题是,当我过滤发射值时,其余的运算符未执行,并且流停止填充发射值。
有任何想法吗?
最佳答案
您可以在switchMap运算符中确定哪个可观察到的返回值,如下所示:
this.deactivate$
.pipe(
switchMap(() => {
if (canDeactivate) {
return Observable.of(canDeactivate);
}
else {
return Observable.of(window.confirm("message"));
}
})
);
奖励( super 短版):
this.deactivate$.pipe(
switchMap((canDeactivate) => Observable.of(canDeactivate || window.confirm("message"))
);
希望这可以帮助!