Javascript - 获取FileReader的返回

时间:2016-09-30 05:25:56

标签: javascript filereader

我是Javascript的新手,我如何获得函数isImage()的返回并使用函数onFileSelect()中的结果。我试图获得结果,但为undefined

提供了值this.isImage()
isImage(file: File) {
    var reader = new FileReader();
    reader.onload = function(event) {
        var contents = reader.result;
        var buf = new Uint8Array(contents);
        if(buf[0] === 0xFF && buf[1] === 0xD8 && buf[2] === 0xFF){
            console.log("jpg") //jpg
            return true //the true value is not returning
        }else{
            return false
        }
    };
    reader.readAsArrayBuffer(file);
}

onFileSelect(event){
    this.files = event.dataTransfer ? event.dataTransfer.files : event.target.files;        
    if(this.isImage(this.files[0])) {
        //if true...
    }
}

1 个答案:

答案 0 :(得分:0)

您没有获得值的原因是因为isImage具有一些异步的文件IO逻辑。处理此问题的方法是将isImage传递回调(cb)。当你得到isImage的结果时,你会调用回调函数,然后在我评论的块中执行。

isImage(file: File, cb) {
    var reader = new FileReader();
    reader.onload = function(event) {
        var contents = reader.result;
        var buf = new Uint8Array(contents);
        if(buf[0] === 0xFF && buf[1] === 0xD8 && buf[2] === 0xFF){
            console.log("jpg") //jpg
            cb(true); //the true value is not returning
        }else{
            cb(false);
        }
    };
    reader.readAsArrayBuffer(file);
}

onFileSelect(event){
    this.files = event.dataTransfer ? event.dataTransfer.files : event.target.files;        
    this.isImage(this.files[0], function(res) {
        // do something with return value here.
    })
}