无法在“ FileReader”上执行“ readAsDataURL”:该对象已经在忙于读取Blob

时间:2019-06-17 18:27:13

标签: javascript php laravel vue.js

我想上传多张图片。当我选择多张图像时,将调用photoSelected函数。我想使用base64,但它会在控制台上显示此错误。

PhotoSelected (e){
       Let files = e.target.files;
       Let reader = new FileReader();
       Let file;
       For (let i=0; I<files.length ; i++){
            file = files [i];
            reader.onload = (file) => {
                   This.product.photo[i] = reader.result;
             }
            reader.readAsDataURL(file)
        }
}

1 个答案:

答案 0 :(得分:0)

您在for循环外定义了阅读器,并在循环内使用了相同的阅读器。这导致阅读器很忙。您可以通过使用IIFE在其自己的范围内为每个循环创建一个读取器来解决此问题。

account_id

由于您已经在使用PhotoSelected (e){ let files = e.target.files; let reader = new FileReader(); let file; for (let i=0; I<files.length ; i++){ (function(file) { var reader = new FileReader(); reader.onload = (file) => { this.product.photo[i] = reader.result; } reader.readAsDataURL(file) })(files[i]); } } 并且使用了块作用域,因此您还可以使用let在每个循环中创建一个读取器。

let