2016-09-30 2 views
0

Я новичок в Javascript, как я получаю возврат функции isImage() и использую результат в функции onFileSelect(). Я стараюсь, чтобы получить результат, но дает значение undefined для this.isImage()Javascript - Получить возврат FileReader

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

ответ

0

Причина вы не получаете значение обратно потому, что isImage имеет некоторый файл ввода-вывода логики, которая является асинхронным. Способ справиться с этим - передать 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. 
    }) 
} 
+0

Спасибо за объяснение, это сработало !!! –

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