2016-06-16 14 views
0

おそらく、質問の質問ですが、私はこれに関する情報を見つけることができません。この問題はObservableを返す関数にあります。これが呼び出されると、パラメータは機能しますが、Observableの値はundefinedです。Observableに未定義の変数

これは私の関数である:

//imports... 

export class MedicosListComponent { 
    @ViewChild('imagenMedico') imagenMedico:any; 
    private image:string; 

    constructor() { 

    } 

    showAllWeas() { 
     ToBase64(this.imagenMedico.nativeElement).subscribe(
      data => { 
       alert(data) 
      }, 
      error => alert(error) 
     ) 
    } 
} 

medicoList変数は、入力タイプのファイルです:

import {Observable} from 'rxjs/Observable'; 

export function ToBase64(inputFile) { 
    console.log('Input:', inputFile); //Here the variable has the correct value 
    let observable = new Observable(observator => { 
     try { 
      console.log('Input en observable:', inputFile); //here is undefined :(
      var image = {}; 

      var reader = new FileReader(); 

      reader.onload = (e) => { 
       image.base64 = btoa(e.target.result); 

       var stringBase64 = `data:${image.filetype};base64,${image.base64}`; 

       observator.next(stringBase64); 
       observator.complete() 
      }; 

      console.log(inputFile); 
      var inputFile = inputFile.files[0]; 
      image.filetype = inputFile.type; 
      image.size = inputFile.size; 
      image.filename = inputFile.name; 
      reader.readAsBinaryString(inputFile); 
     } catch (e) { 
      observator.error(e); 
     } 
    }); 

    return observable; 
} 

My機能は、このように、Angular2アプリケーションから呼び出されます。

ご協力いただきありがとうございます。

答えて

0

私はなぜ知らないが、具体的な問題は、スコープで、これだけのように、それが動作する機能で、余分な変数を追加:

import {Observable} from 'rxjs/Observable'; 

export function ToBase64(inputFile) { 
    var i = inputFile; // <------- extra variable 
    return new Observable(obs => { 
     try { 
      var image = {}; 
      var reader = new FileReader(); 

      reader.onload = (e) => { 
       image.base64 = btoa(e.target.result); 

       var stringBase64 = `data:${image.filetype};base64,${image.base64}`; 

       obs.next(stringBase64); 
       obs.complete() 
      }; 

      var inputFile = i.files[0]; //here i has the correct value 
      image.filetype = inputFile.type; 
      image.size = inputFile.size; 
      image.filename = inputFile.name; 
      reader.readAsBinaryString(inputFile); 
     } catch (e) { 
      obs.error(e); 
     } 
    }); 
} 

すべてであること。