web-dev-qa-db-fra.com

Angular RxJS: opérateur conditionnel (sinon)

J'essaie de comprendre comment mettre en œuvre une opération conditionnelle simple dans un observable.

this.deactivate$
    .pipe(
        filter((canDeactivate) => !canDeactivate),
        switchMap(() => Observable.of(window.confirm("message")))
    );

Ce que je veux obtenir, c'est que:

if (canDeactivate) {
    return canDeactivate;
}
else {
    return window.confirm("message");
}

Le problème sur le premier code ci-dessus est que lorsque je filtre la valeur émise, le reste des opérateurs n'est pas exécuté et le flux s'arrête pour remplir la valeur émise.

Des idées?

5
Jordi

window.confirm Est bloquant vous pouvez donc simplement utiliser un opérateur map(). L'appel de switchMap à of(window.confirm(..)) arrêtera tout de même l'exécution de JavaScript.

this.deactivate$
    .pipe(
        map(canDeactivate => canDeactivate ? canDeactivate : window.confirm("message"))
    );
0
Reactgular