tap()
и map()
- два совершенно разных оператора. Они не являются взаимозаменяемыми.
map () будет использовать функцию, указанную в ее параметре, для изменения значения наблюдаемого с одной вещи на другую.
tap () запускает побочный эффект . Я не буду go слишком глубоко вдаваться в , что такое побочный эффект , но вкратце это то, что не имеет ничего общего с возвращаемым значением функции.
В вашем коде:
static dummyTap(isValid: () => boolean): AsyncValidatorFn {
return (control: AbstractControl): Observable<ValidationErrors | null> => {
console.log("TAP " + isValid());
return of(isValid).pipe(
tap(() => isValid() ? null : {invalid: true})
);
};
}
tap()
здесь ничего не делает. tap()
не влияет на возвращаемое значение канала, в котором он находится.
Я разбудил StackBlitz с дополнительным журналированием, чтобы попытаться продемонстрировать эту точку.