returning of(T) 和 new BehaviorSubject(T) 有什么区别?

Any difference between returning of(T) and new BehaviorSubject(T)?

我想知道这两个函数之间是否有任何区别:

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

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

我 return 在 AsyncValidatorFnnew BehaviorSubject(T) 并且我得到了不同的行为,如果我 return 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;
          }
        )
    );
  };
}

如果我return:

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

它工作正常

Of 在发出所有值后立即完成,并在订阅后立即发出所有值。

BehaviorSubject 是可观察的,可以发出值,直到您手动关闭它。您可以在 BehaviourSubject 实例上调用 .next() 以发出新值。每个订阅者都将获得 BehaviorSubject 发出的最后一个值以及订阅后的所有其他值。

多次订阅 of 将导致发出相同值的相同结果。