switchMap 不重复 HTTP 调用。
我创建了一个指令来验证电子邮件是否已经存在。
在该指令内部,是一个 API。每次按键发生时,都会调用 API 来检查它是否已经存在。
我正在使用 switchMap 来防止多个 HTTP 请求并取消以前的请求。
但问题是,一旦请求已经发出并被取消,它就不会再重复了。
例如 test@gmail.com - 取消请求
test2@gmail.com - 成功的 API
test@gmail.com(再次)- API 调用将不再发生。
为什么会发生这种情况(对我来说)?
我检查了 switchMap 操作员文档,但没有看到任何关于此的情况。
<input [(ngModel)]="sampleEmail" placeholder="Email" isEmailExistsValidator>
export class isEmailExistsValidator implements AsyncValidator {
constructor(private someService: SomeService) { }
public validate(control: AbstractControl): Observable<ValidationErrors|null> {
if (isNullOrUndefined(control.value)) {
return of(null);
}
return this.someService
.isEmailExistsValidator(control.value)
.pipe(
switchMap((response) => {
if (response.availability) {
return of(null);
} else {
return of({ emailAlreadyExists: response.response });
}
})
);
}
}
public isEmailExistsValidator(email: string): Observable<EmailAvailability> {
return this.httpClient.get<EmailAvailable>('/api/sampleEmailValidation/' + email);
}
我希望 API 在任何电子邮件输入中都能成功。