在Angular 6中,您可以使用async
和await
关键字来解决ValidatorFn
期望返回一个Promise
的错误。
下面是一个示例代码,演示了如何在Angular 6中使用async
和await
来解决此问题:
import { AbstractControl, ValidatorFn } from '@angular/forms';
function asyncValidator(): ValidatorFn {
return async (control: AbstractControl) => {
const value = control.value;
// 模拟异步操作
await new Promise(resolve => setTimeout(resolve, 2000));
if (value === 'foo') {
return { asyncValidation: true };
}
return null;
};
}
在上面的代码中,我们创建了一个名为asyncValidator
的函数,它返回一个ValidatorFn
。该ValidatorFn
实际上是一个异步函数,它接受一个AbstractControl
参数,并返回一个Promise
。
在函数体内,我们可以使用await
关键字来等待一个异步操作的完成。在这个例子中,我们使用setTimeout
来模拟一个异步操作,等待2秒钟。
然后,我们根据控件的值进行验证,并根据需要返回一个验证错误对象或null
。
请注意,在使用异步验证器时,您需要将asyncValidator
函数应用于表单控件。例如,在模板驱动表单中,您可以使用ngModel
指令:
Invalid value
在上面的代码中,我们将asyncValidator
应用于ngModelOptions
指令中的validators
属性,以便在验证时调用异步验证器。
最后,我们使用*ngIf
指令来显示验证错误消息,如果name
控件的asyncValidation
属性为true
。
这样,您就可以在Angular 6中使用async
和await
来解决ValidatorFn
期望返回一个Promise
的错误。