首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >等待方法角5

等待方法角5
EN

Stack Overflow用户
提问于 2018-10-12 23:52:38
回答 2查看 49关注 0票数 0

我的服务课上有一份外购单。

代码语言:javascript
复制
public getEndereco(cep: string){
        return this.http.get("http://viacep.com.br/ws/" + cep + "/json",{
            responseType: 'text'
        });
    }

在那之后,我抓住了返回的json,并把我的类Util变成了一个对象。

代码语言:javascript
复制
public getEndereco(cep: string): Endereco{
        let endereco = new Endereco();
        this.serviceUtil.getEndereco(cep)
          .subscribe((response)=>{
            let json = JSON.parse(response);
            endereco.cep = json.cep;
            endereco.rua = json.logradouro;
            endereco.complemento = json.complemento;
            endereco.bairro = json.bairro;
            endereco.cidade = json.localidade;
            endereco.estado = this.buscarEstadoSigla(json.uf);
          },(erro)=>{
            console.log(erro);
          });

          return endereco;
      }

在我的视觉层中,我得到了这个物体,并制作了这个:

代码语言:javascript
复制
private getEndereco(){
    this.endereco = this.util.getEndereco(this.endereco.cep);
    this.estado = this.endereco.estado;
  }

但"this.endereco.estado“总是为空。我知道角功是异步的。我如何期望对象"this.endereco“从返回返回到赋值后作为底线?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-12 23:58:36

相反,您应该修改getEndereco以返回Observable,如下所示:

代码语言:javascript
复制
import { map } from 'rxjs/operators';

public getEndereco(cep: string): Endereco{     
    return this.serviceUtil.getEndereco(cep)
      .pipe(map((response)=>{
        let endereco = new Endereco();
        let json = JSON.parse(response);
        endereco.cep = json.cep;
        endereco.rua = json.logradouro;
        endereco.complemento = json.complemento;
        endereco.bairro = json.bairro;
        endereco.cidade = json.localidade;
        endereco.estado = this.buscarEstadoSigla(json.uf);
        return endereco;
      }));
  }

然后您可以订阅,如下所示:

代码语言:javascript
复制
private getEndereco(){
    this.util.getEndereco(this.endereco.cep).subscribe(endereco => {
        this.endereco = endereco;
        this.estado = this.endereco.estado;
    });

}
票数 2
EN

Stack Overflow用户

发布于 2018-10-13 01:23:01

另一件事:如果json是已知的对象,就不需要翻译它的所有内容。创建一个endereco.model.ts并导入它。然后你可以用它作为一个对象。

代码语言:javascript
复制
 this.serviceUtil.getEndereco(cep)
        .pipe((response: Endereco) => {
         let endereco = response;
         return endereco;
         })

然后你的模型:

代码语言:javascript
复制
export class Endereco {
    cep : string;
    rua : string;
    complemento: string;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52788308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档