这是我的异步验证器,它没有go 盎司时间,我如何添加它?

static emailExist(_signupService:SignupService) {
  return (control:Control) => {
    return new Promise((resolve, reject) => {
      _signupService.checkEmail(control.value)
        .subscribe(
          data => {
            if (data.response.available == true) {
              resolve(null);
            } else {
              resolve({emailExist: true});
            }
          },
          err => {
            resolve({emailExist: true});
          })
      })
    }
}

推荐答案

Angular 4+, Using Observable.timer(debounceTime) :

@izupet的答案是正确的,但值得注意的是,使用Observable时,它更简单:

emailAvailability(control: Control) {
    return Observable.timer(500).switchMap(()=>{
      return this._service.checkEmail({email: control.value})
        .mapTo(null)
        .catch(err=>Observable.of({availability: true}));
    });
}

由于Angular 4已经发布,如果发送新的值进行判断,则Angular 在定时器中仍处于暂停状态时取消订阅Observable,因此您实际上不需要自己管理setTimeout/clearTimeout逻辑.

使用timer和Angular的异步验证程序行为,我们重新创建了RxJS debounceTime.

Angular相关问答推荐

日语字符不受角形约束控制

Angular ngModel双向数据绑定不适用于表单中的Select元素

在Angular中将路由解析器提供程序和组件提供程序相结合

NG构建后多余的国旗

为什么在回调完成之前,可观察对象会返回?

[NullInjectorError]:R3InjectorError(Standalone[_AppComponent])[]:NullInjectorError:No provider for _HttpClient

ANGLING:ExpressionChangedAfterChecked在嵌套形式中由子项添加验证器

为什么动画只触发一次?

为什么初始化值为 1 的BehaviorSubject 不能分配给类型number?

使用 Angular 类构造函数来获取依赖项

NgRx Effects 抛出类型错误,我不知道发生了什么

使用 RXJS 进行空闲/不活动跟踪

如何在 cypress 测试中实现拖放?

如何从表单组中禁用的表单控件中获取值?

为什么 HttpParams 在 Angular 4.3 中的多行中不起作用

类型错误:无法读取未定义的属性

visibility:hidden

什么是 Angular 4,我可以从哪里了解更多信息?

ngx-toastr,Toast 未在 Angular 7 中显示

如何手动延迟加载模块?