Javascript 没有对web工作程序启动FileReader
我有下面的函数将PDF转换为图像,该函数位于web worker中 由于某种原因,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
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
callfileReader.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不,它没有,我不确定我是否理解您的意思。你能给我举个例子吗?