2016-06-16 3 views
0

Возможно, это вопрос о нобе, но я не могу найти информацию об этом. Проблема заключается в функции, возвращающей Observable. Когда это вызывается, параметр работает, но в Observable его значение равно undefined.Неопределенная переменная в наблюдаемом

Это моя функция:

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

Моя функция вызывается из Angular2 App, как это:

//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 является входной файл типа.

Заранее благодарим за любую помощь.

ответ

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

Это все.

Смежные вопросы