javascript - 文件读取器速度慢且未在 React 上设置状态

标签 javascript reactjs state filereader

当转换 a. pdf 文件转换为 Base64,我需要填写我的状态,但由于某种原因,我的转换速度比我的 setstate 慢,setstate 在设置时始终为空。

我的代码

async transformBase64(inputFile) {    
    return new Promise((resolve, reject) => {
      var fileReader = new FileReader();
      fileReader.readAsDataURL(inputFile)
      if (fileReader.result != undefined){
        resolve(this.setState({ Base64: fileReader.result }), () => {});                
      }else{
        reject("Err")
      }            
    });
  }

我可以做什么来解决我的问题?

最佳答案

您似乎没有为 fileReader 设置 onload 回调。这是为了正确向您的应用程序发出文件数据已加载并准备就绪的信号所必需的,因为 FileReader API 是异步的。

考虑对您的代码进行以下更改来解决您的问题:

async transformBase64(inputFile) {    

    return new Promise((resolve, reject) => {

      var fileReader = new FileReader();

      // If error occurs, reject the promise
      fileReader.onerror = () => {
          reject("Err")
      }

      // Define an onload handler that's called when file loaded
      fileReader.onload = () => {

        // File data loaded, so proceed to call setState
        if (fileReader.result != undefined){
          resolve(this.setState({ 
             Base64: fileReader.result 
          }), () => {});                
        }else{
          reject("Err")
        }  
      }

      fileReader.readAsDataURL(inputFile)

    });
  }

关于javascript - 文件读取器速度慢且未在 React 上设置状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53107439/

相关文章:

与 STUArray 一起使用的 Haskell 函数

javascript - IE8 中的 Html 和 CSS z-index 问题

javascript - 使用 VBA 显示 javascript 警报

javascript - 无法达到某个值......ReactJS

reactjs - 在渲染之前查找 react 组件或图像的大小

javascript - 当页面加载时,react-facebook-login 中的 FacebookLogin 会被自动调用

ios - 在 iOS 中,动画 View 在手动调用 segue 后返回到其原始状态

caching - Blazor 服务器应用程序中的应用程序范围数据

javascript - 函数仅在刷新页面时执行,而不是在首次加载时执行

javascript - Vue.js、Axios 对 Laravel API 的多个 get CORS 请求随机失败