我正在调用web api来检查urlalias是否可用,对于此任务,我在我的异步验证程序中使用了httpservice。 问题是,当调用验证程序时,将执行所有正确的代码路径(所有console.log()
运行并按预期行为)。定制异步验证在返回承诺时不起作用
无论验证中的承诺是否返回/解析为空或一个{ 'isUrlAliasActivityMainAvailable': true }
,控制器总是显示一个错误对象,因此保持表单状态为无效,为什么(血腥地狱!)?
我使用的是:角:2.1.0和rxjs:5.0.0-beta.12
这是我formbuilder:
this.formBuilder.group({
//...
"urlAliasActivityMain":[null,[ ValidatorsZr.isUrlAliasActivityMainAvailableAsyncValidator(this.httpActivityService)]],
});
这是我的验证:
public static isUrlAliasActivityMainAvailableAsyncValidator(httpActivityService: HttpActivityService) {
return function (control: FormControl): Promise<any> | Observable<any> {
const promise = new Promise<any>(
(resolve, reject) => {
httpActivityService.isUrlAliasActivityMainAvailable(control.value)
.subscribe(
(data: any) => {
console.log("isUrlAliasActivityMainAvailableAsyncValidator");
console.log(data);
if (data == false) {
console.log("data == false");
resolve({ 'isUrlAliasActivityMainAvailable': true });
}
else {
console.log("data == true");
resolve(null);
}
},
)
});
return promise;
}
}
妈呀,很惭愧我的!感谢您的帮助,您一直是一个伟大的节省时间! – Luther
因为这件事我浪费了大约4个小时。 –
这节省了将来的大声笑,现在和它搏斗了一天,不知道这是我放置它的位置 –