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 在 AsyncValidatorFn
中 new 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
将导致发出相同值的相同结果。
我想知道这两个函数之间是否有任何区别:
function testObservable(message: string) : Observable<string>{
return new BehaviorSubject(message);
}
function testObservable(message: string) : Observable<string>{
return of(message);
}
我 return 在 AsyncValidatorFn
中 new 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
将导致发出相同值的相同结果。