Javascript - 获取 FileReader 的 return

Javascript - Get the return of FileReader

我是 Javascript 的新手,我如何获得函数 isImage() 的 return 并在函数 onFileSelect() 中使用结果。我正在尝试获取结果,但为 this.isImage()

提供了值 undefined
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...
    }
}

你没有得到返回值的原因是因为 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.
    })
}