node.js - Angular,从承诺中提取价值
问题描述
我有一个返回 Promise 的函数,在这个 Promise 中我得到了一个解析对象。这是我的服务的功能很好。
buscarUsuario(email: string){
return new Promise((resolve, reject) => {
this.http.post(`${URL}/user/email`, {email})
.subscribe(resp => {
//console.log(resp['usuario']);
resolve(resp['usuario']);
});
})
}
然后我从这个var中的promise中得到值:
const getDatos = this.usuarioService.buscarUsuario(this.correoUsuario.value.toString());
然后我调用 var 从解析中获取值,但我无法从那里提取该值:
var usuario: Usuario;
getDatos.then(usu => {
usuario = usu;
//Here I can see the value
console.log(usuario);
});
//But here I can't see the value
//And it's where I really need to get the value
console.log(usuario);
那么,我如何在 Promise 之外获得该值?
解决方案
不推荐在 Angular 中使用 Promises 。Angular 推荐使用Observable
来处理异步操作
让我们尝试更改您的代码以仅返回 Observables
buscarUsuario = (email: string) =>
this.http.post<any>(`${URL}/user/email`, {email}).pipe(
map(resp => resp.usuario as Usuario)
)
基本上,上面的代码返回一个Observable<any>
(任何类型的 Observable)。我使用类型<any>
转换将结果转换为Obserable<any>
. 接下来我使用管道usuario
从响应中提取
现在我们实际上可以将此值分配给一个变量...
const getDatos$ = this.usuarioService.buscarUsuario(this.correoUsuario.value.toString());
注意:这是一个Observable
,您需要订阅它
可以像任何其他属性一样分配 Observable
const usuario: Observable<Usuario> = getDatos$
推荐阅读
- python - 在 Python 中为多边形创建圆边
- bit-manipulation - 如何简化这个“一次清除多个位”功能?
- php - WordPress子、孙、曾孙类别必须使用父类别模板
- java - ANDROID_SDK_ROOT=undefined(推荐设置)JDK 8 需求检查失败
- python - Python:对列表进行排序,使 5.10 在 5.9 之后
- java - Gradle:无法通知构建侦听器
- botframework - 我可以合并现有的 Bot 构建以在 Bot Composer 中运行吗
- git - Git 在单次提交中从 master 获取快照
- javascript - 如何将页面链接导航到特定 div?
- java - 无法识别的 VM 选项“AggressiveOpts”