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