Есть ли разница между возвратом (T) и новым поведением Subject (T)? - PullRequest
0 голосов
/ 24 октября 2019

Мне интересно, есть ли различия между этими двумя функциями:

function testObservable(message: string) : Observable<string>{
    return new BehaviorSubject(message);    
}

function testObservable(message: string) : Observable<string>{
    return of(message); 
}

Я возвращаю new BehaviorSubject(T) в AsyncValidatorFn, и я получаю другое поведение, что если я вернусьof(T)

ОБНОВЛЕНИЕ - КОД ВАЛИДАЦИИ

export function createPasswordMatchesWithServerValidator(
  passwordMatchesWithServerService: PasswordMatchesWithServerService
): AsyncValidatorFn {

    const wrongPassword = 'password';

    return (c: FormControl): Observable<ValidationErrors | null> => {

        passwordMatchesWithServerService.check(c.value);

        return passwordMatchesWithServerService.checkIfValidOldPassword$.pipe(
          map(response => {
            let error = {};
            error[wrongPassword] = true;
            switch (response.state) {
              case ResponseState.Success:
                console.log('Validation Success: ', response.content);
                break;

              case ResponseState.Failure:
                console.log('Validation Fail: ', response);
                error = {};
                error[wrongPassword] = true;
                break;

              case ResponseState.Loading:
                console.log('Validation Loading...');
                break;
            }
            return error;
          }
        )
    );
  };
}

Если я вернусь:

const error = {};
error[wrongPassword] = true;
return of(error);

это просто отлично работает

1 Ответ

3 голосов
/ 24 октября 2019

Of завершается, как только все значения отправляются, и он выдает все из них сразу после подписки.

BehaviorSubject является наблюдаемым, который может выдавать значения, пока вы не закроете его вручную. Вы можете вызвать .next() на BehaviourSubject экземпляре, чтобы выдать новое значение. Каждый подписчик получит последнее значение, выданное BehaviorSubject, и все последующие значения после подписки.

Многократная подписка на of приведет к тому же результату выдачи одинаковых значений.

...