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(), кажется, решен, но он все еще не работает. Что я могу делать не так?