Olá pessoal, gostaria de uma ajuda no entendimento de um código que estou tentando fazer funciona em Angular.
Na minha aplicação tenho um serviço, abaixo segue o fonte.
import { Order } from './../models/order';
import { Injectable } from '@angular/core';
import { Http, Headers } from '@angular/http'
import 'rxjs/add/operator/map';
@Injectable()
export class PumpModelsService {
private filteredPumps = [];
public filteredPumpsColumns: string[] = [];
public filteredPumpsIndex: string[] = [];
private volumetric_eficiency = [];
public interference = [];
private knn = [];
constructor(private http: Http) { }
getKNN() {
this.http
.get('http://127.0.0.1:5000/analise')
.map(res => res.json())
.subscribe(result => {
this.knn = result;
console.log(this.knn); // linha 44
}, erro => console.log(erro));
console.log(this.knn); //linha 46
return this.knn;
}
}
O problema está no método KNN. Reparem que tenho dois console.log(this.knn) neste método. Quando quando chamo o metodo getKNN() o primeiro console.log que esta no escopo do subscribe é impresso normalmente (com os dados que vem do meu back-end) mas quando o segundo console.log é impresso, no escopo do método o resultado é undefined.
Vejam como aparece no console do browser: https://www.dropbox.com/s/dptc4kvvns69k75/console.png?dl=0
Parece que o segundo console.log é executado primeiro e depois o console.log que está dentro do método subscribe.
Esté é o json que é retornado.
{"eficiencia_volumentrica":{"49795":95,"49343":82,"49796":94},
"interferencia":{"49795":0.2,"49343":0.116,"49796":0.216}}