Вы можете нажать оператора, чтобы заархивировать то, что вы хотите:
this.order = this.orderService.ordersLoaded.pipe(
map((orders: OrderModel[]) => orders.find(order => order.orderName === this.name.toUpperCase()),
tap(order => {
if (!order) {
this.router.navigate(['/notFound']);
}
})
));
Вы можете создать несколько пользовательских операторов rxjs, чтобы избавиться от if
:
export function tapIf<T>(
predicate: (value: T) => boolean,
fn: (x: T) => void
): MonoTypeOperatorFunction<T> {
return input$ =>
input$.pipe(
tap(x => {
if (predicate(x)) {
fn(x);
}
})
);
}
export function tapIfFalsy<T>(fn: (x: T) => void): MonoTypeOperatorFunction<T> {
return tapIf<T>(x => !x, x => fn(x));
}
, затем выкод может стать еще проще:
this.order = this.orderService.ordersLoaded.pipe(
map((orders: OrderModel[]) => orders.find(order => order.orderName === this.name.toUpperCase()),
tapIfFalsy(() => this.router.navigate(['/notFound']))
));