ValidateDirectory(clientId: string): ValidatorFn {
return (control: AbstractControl): ValidationErrors | null => {
const ret: ValidationErrors = { isValidDirectory: true };
if (control.value == null || control.value === '') {
return ret;
}
this.service.getList(clientId, control.value).subscribe((res) => {
if (res.technicalRetCode !== 0) {
console.log(ret);
return ret;
}
return null;
});
return null;
};
}
ngOnInit() {
...
this.fourthFormGroup = this._formBuilder.group({
dateipfad: ['', {validator: Validators.compose([Validators.required, this.directoryValidator.ValidateDirectory(this.clientID)]), updateOn: 'blur'}]
});
...
}
我已经尝试了很多,比如使用validators
和array一起使用validators.compose
,调整了我的Validator方法来设置control.seterrors(ret)
其他一些东西,但都没有效果。
我觉得有一个很简单的解决办法,但我就是找不到...
编辑1:我创建了一个stackblitz https://stackblitz.com/EDIT/angular-ysyb9i?file=src%2fapp%2fapp.component.html
说明:输入接受任何字符串,在取消选择时验证开始。如果Input为'false',则应通过返回常量ret:ValidationErrors={isvaliddirectory:true}将Input设置为invalid;
,则任何其他字符串都应有效,并返回null
。
这两个结果都记录在控制台上,所以您可以检查它。如果输入无效,它应该在下面显示一个通知div(不太确定,只是为了这个stackblitz显示而添加了它)
如果验证器中的代码是异步的,则应该使用异步验证器。
this.fourthFormGroup = this._formBuilder.group({
dateipfad: ['', {
validators: [Validators.required],
asyncValidators: [this.directoryValidator.ValidateDirectory(this.clientID)],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
put it here
updateOn: 'blur'
}]
});
验证器应该返回AsyncValidatorFn接口,在该接口中,您应该订阅observable,但应该映射到所需的值。Angular将自动订阅您的观察。
ValidateDirectory(clientId: string): AsyncValidatorFn {
return (control: AbstractControl):
Promise<ValidationErrors | null> | Observable<ValidationErrors | null> => {
const ret: ValidationErrors = { isValidDirectory: true };
if (control.value == null || control.value === '') {
return of(ret);
}
return this.service.getList(clientId, control.value).pipe(map((res: any) => {
if (res.technicalRetCode !== 0) {
return ret;
}
return null;
}));
};
}
分叉斯塔克布利茨
我正在使用Spring Webflux和Spring Boot2,我的场景如下: 在返回之前,我如何将来自流量和正常产品列表的结果连接起来?没有反应控制器是可能的吗? 附言。我不想对从调用1获得的结果调用。block()和CompleteableFuture
除了极少数例外 (一些文件系统操作的“同步”结束),没有一个 Vert.x Api 阻塞调用线程。 如果可以立即提供的结果,它将立即返回,你通常会提供一个handle来接收过一段时间的事件。 由于Vert.x API没有任何阻塞的线程,这意味着你可以使用Vert.x来处理只是使用小数目线程的大量并发。 常规阻塞API使用线程可能会阻塞: 从socket读取数据 向磁盘写入数据 向收件人发送一条消息
本文向大家介绍node.js回调函数之阻塞调用与非阻塞调用,包括了node.js回调函数之阻塞调用与非阻塞调用的使用技巧和注意事项,需要的朋友参考一下 首先,node.js作为javascript运行平台,它采用了事件驱动和异步编程的方式,通过事件注册和异步函数,开发人员可以提高资源利用率,服务器的性能也能得到改善。其次,对于前端人来说,node.js作为js的运行平台,我们可以通过编写系统级或者
问题内容: 我有这段代码可以在Linux中从Serial读取,但是我不知道在读取SerialPort时阻塞和非阻塞之间有什么区别,在哪种情况下哪个更好? 问题答案: 您提到的代码是IMO编码和注释不当的代码。该代码不符合POSIX的可移植性惯例,如正确设置终端模式和POSIX操作系统的串行编程指南中所述。该代码没有提到它使用非规范(也称为原始)模式,并且重用了“阻塞”和“非阻塞”术语来描述 VMI
我完全混淆了,,。 哪个是阻塞,哪个不是? 我的意思是如果我使用父进程是否等待子进程返回/才继续执行。 如何影响这些调用?
OpenResty 的诞生,一直对外宣传是同步非阻塞(100% non-blocking)的。基于事件通知的 Nginx 给我们带来了足够强悍的高并发支持,但是也对我们的编码有特殊要求。这个特殊要求就是我们的代码,也必须是非阻塞的。如果你的服务端编程生涯一开始就是从异步框架开始的,恭喜你了。但如果你的编程生涯是从同步框架过来的,而且又是刚刚开始深入了解异步框架,那你就要小心了。 Nginx 为了减