У меня есть проект, использующий socket.io для вызовов данных на сервер. Эта часть работает полностью, но она использует функцию обратного вызова и не имеет наблюдаемой. Итак, моя проблема двоякая, и я не знаю, с чего начать.
Я пытаюсь создать собственный асинхронный валидатор, я видел, как это делается с помощью Obervables, поэтому я подумал, что первый набор - преобразовать мой вызов сокета в наблюдаемый.
Validator.ts
export class MyValidators {
static rules(socket: WebSocketService) {
return (control: AbstractControl): Observable<ValidationErrors | null> => {
const val: string = control.value;
const pwdRules: Observable<RuleInterface> = new Observable(observer => {
socket.getParms((resp: SocketResponse<RuleInterface[]>) => {
observer.next(resp.records[0]);
});
});
return pwdRules.pipe(
map(rule => val.length < rule.max_len ? null : {tooBig: true} )
)
}
}
Поэтому я преобразую свой вызов сокета в Observable, и они используют pipe и map для возврата объекта null или ошибки.
Мой компонент FormGroup выглядит так:
constructor(
private fb: FormBuilder,
private socket: WebSocketService
) { }
....
ngOnInit {
this.reset2Form = this.fb.group({
val1: ['', [Validators.required, MyValidators .rules(this.socket)]],
val2: ['', [Validators.required]]
});
}
Когда я распечатываю ошибки val1, я получаю это.
{
"_isScalar": false,
"source": { "_isScalar": false }, "operator": {}
}
Я вижу из консоли, что вызов сокета никогда не вызывался.
Мой вопрос: что я делаю не так? Я так настроил наблюдаемое? Или как я использую трубу?