我试图弄清楚如何将一个简单的条件运算实现为可观察的。

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"))
    );

希望这可以帮助!

08-26 03:11