Javascript 没有对web工作程序启动FileReader

Javascript 没有对web工作程序启动FileReader,javascript,filereader,Javascript,Filereader,我有下面的函数将PDF转换为图像,该函数位于web worker中 由于某种原因,fileReader.onload没有被触发,filePdf是正确的,并且格式正确。有什么想法吗 const processFile = async (filePdf, post) => { let PDFJS if (!PDFJS) { PDFJS = await import('pdfjs-dist/build/pdf.js') } if (!filePdf) return c

我有下面的函数将PDF转换为图像,该函数位于web worker中

由于某种原因,
fileReader.onload
没有被触发,
filePdf
是正确的,并且格式正确。有什么想法吗

const processFile = async (filePdf, post) => {
  let PDFJS
  if (!PDFJS) {
    PDFJS = await import('pdfjs-dist/build/pdf.js')
  }
  if (!filePdf) return
  const fileReader = new FileReader()
  console.log(filePdf)
  let pages
  try {
    fileReader.onload = async () => {
      const pdf = await PDFJS.getDocument(fileReader.result).promise
      pages = await pdfToImageMap(pdf)
    }
  } catch (e) {
    console.log({e})
  }
  fileReader.readAsArrayBuffer(filePdf)
  return post({type: 'done'})
}
filePdf


尝试更改您的逻辑

目前,您正在尝试等待onload,这将起作用。因此,
try
块成功。然后返回
post
函数。因此,您已经运行了文件读取器,但没有等待它加载,而是使用
post
函数返回

而是等待加载函数周围的承诺,等待
fileReader
加载。在
Promise
call
fileReader.readAsArrayBuffer(filePdf)
中,确保调用了
onload
函数。在
onload
函数中,使用
try/catch
块使用
PDFJS
框架

另外,不要浪费存储在变量中的任何值。如果
pages
值是您需要的,那么使用它并以某种方式返回它。否则,不要存储该值并丢弃它

尝试下面的代码段,看看它是否有效

const processFile = async (filePdf, post) => {
  const PDFJS = await import('pdfjs-dist/build/pdf.js')
  if (!filePdf) return
  console.log(filePdf)
  const fileReader = new FileReader()
  const pages = await new Promise(resolve => {
    fileReader.onload = async () => {
      try {
        const pdf = await PDFJS.getDocument(fileReader.result).promise
        const pages = await pdfToImageMap(pdf)
        resolve(pages)
      } catch (e) {
        console.log({e})
      }
    }
    fileReader.readAsArrayBuffer(filePdf)
  })
  return post({type: 'done', pages})
}

当您将
fileReader.readAsArrayBuffer(filePdf)
放入
try
块中时会发生什么?@EmielZuurbier当我这样做时,
fileReader.readAsArrayBuffer(filePdf)
正在被解雇。@EmielZuurbier不,它没有,我不确定我是否理解您的意思。你能给我举个例子吗?