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