В ожидании метода Angular 5 - PullRequest
0 голосов
/ 13 октября 2018

У меня есть внешняя заявка на мой класс обслуживания

public getEndereco(cep: string){
        return this.http.get("http://viacep.com.br/ws/" + cep + "/json",{
            responseType: 'text'
        });
    }

После этого я ловлю возвращаемый json и помещаю в объект мой класс Util

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;
      }

В моем слоеВидение, я получаю этот объект и делаю это:

private getEndereco(){
    this.endereco = this.util.getEndereco(this.endereco.cep);
    this.estado = this.endereco.estado;
  }

Но всегда "this.endereco.estado" приходит в ноль.Я знаю угловую работу с асинхронным.Как я могу ожидать, что объект "this.endereco" вернется из возврата после присваивания в качестве нижней строки?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Еще одна вещь: нет необходимости переводить все из json, если это известный объект.Создайте endereco.model.ts и импортируйте его.Тогда вы можете использовать его как объект.

 this.serviceUtil.getEndereco(cep)
        .pipe((response: Endereco) => {
         let endereco = response;
         return endereco;
         })

Тогда ваша модель:

export class Endereco {
    cep : string;
    rua : string;
    complemento: string;
}
0 голосов
/ 13 октября 2018

Вместо этого вы должны изменить getEndereco, чтобы вернуть Observable, например:

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;
      }));
  }

Затем вы можете подписаться следующим образом:

private getEndereco(){
    this.util.getEndereco(this.endereco.cep).subscribe(endereco => {
        this.endereco = endereco;
        this.estado = this.endereco.estado;
    });

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...