我是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...
}
}
答案 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.
})
}