angular - Angular 2 异步验证器
问题描述
isUnameTaken(formCtrl:FormControl): Promise<any>|Observable<any>{
var status ;
console.log(this.formGroup);
this.http.post("http://localhost:3000/user/isAvaliable", { userName: formCtrl.value}).subscribe((resp:any)=>{
console.log(resp);
status = resp.status;
console.log(status);
if (status === 'success') {
return Promise.resolve({ userExists: true });
} else {
return Promise.resolve(null);
}
});
}
我的状态为未定义,因为发布请求需要时间来解决我试图解决使用 Promise.resolve 来返回承诺,所以如何以正确的方式等待响应
上面的函数是角度验证器函数
解决方案
您可以使用Observable
smap
函数来转换 发出的值Observable
,如下所示:
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
// ...
return this.http.post("http://localhost:3000/user/isAvaliable", { userName: formCtrl.value }).pipe(
map((resp: any) => {
console.log(resp);
status = resp.status;
console.log(status);
return status === 'success' ? { userExists: true } : null;
})
);
推荐阅读
- c - 使用管道时似乎无法打印子进程的标准输出(C 和 Windows)
- scala - 如何在 Scala 中过滤掉字符串向量中的一次出现?
- java - 我可以在不手动下载二进制文件的情况下运行 PhantomJS 吗?
- python-3.x - 将Django中的对象列表序列化为嵌套的json
- c++ - 向量是否也在 C++ 中初始化原始类型?
- clojure - Luminus H2留言簿应用程序中没有合适的驱动程序
- python - 在 Notebook Python 中禁用 tesseract 字典
- javascript - 对象没有被传递到本地存储 - React JS
- php - 在灵活的列中显示数据,而不是在 php 中的行
- reactjs - 反应排序列表 - 点击事件触发不正确