首页 文章

未定义的变量到Observable中

提问于
浏览
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应用程序调用的,如下所示:

//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 变量是输入类型文件 .

在此先感谢您的帮助 .

1 回答

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

    就这些 .

相关问题