Angular2 - AsyncValidator зависит от параллельного вызова

У меня проблема с AsyncValidators. Обычно разрешаемое обещание зависит от кода, вызываемого самим обещанием, но что делать, когда код вызывается извне и обещание должно его прослушать? Я не уверен, что объясняю это правильно, но вот пример:

public valid: boolean;

ngOnInit() {
  ...
  formControl = new FormControl('', this.asyncValidator.bind(this))
}

/* some code runs an external request and runs setValid() */

setValid(valid: boolean) {
  this.valid = valid;
  ...
}

asyncValidator(): { [key: string]: any } {
  ...
  return new Promise(resolve => {
    /* somehow waiting on the setValid() function to be run */
  });
}

Я попробовал этот подход:

public valid: boolean;

ngOnInit() {
  ...
  formControl = new FormControl('', this.asyncValidator.bind(this))
}

/* some code runs an external request and runs setValid() */

setValid(valid: boolean) {
  if (this.callDone) {
    if (valid) {
      this.callDone(null);
    }
    else {
      this.callDone({ 'wrong': true });
    }
  }
  this.callDone = null;
  this.valid = valid;
}

asyncValidator(): { [key: string]: any } {
  if (this.callDone)
    this.callDone(this.valid);
  return new Promise(resolve => {
    this.callDone = resolve;
  });
}

Но это не меняет статус формы. CallDone(), кажется, решен, но он все еще не работает. Что я могу делать не так?

0 ответов

Другие вопросы по тегам