首页 > 解决方案 > 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 之外获得该值?

标签: node.jsangulartypescripthttppost

解决方案


不推荐在 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$

推荐阅读