首页 > 解决方案 > addEventListener 多次触发

问题描述

所以我正在尝试将 blob 转换为实际文件。为了减少线程负载,我制作了 worker.js 文件,该文件侦听事件,然后将事件数据推送到数组,最后将其转换为 blob。

function download() {
    setGotFile(false);
            
    const dwn = function (event) {
        let stream = event.data.stream();
        console.log(stream);
        const fileStream = streamSaver.createWriteStream(fileNameRef.current);
        console.log(fileStream);
        stream.pipeTo(fileStream);
        stream = null;
    }
    worker.postMessage("download");
    worker.addEventListener("message", dwn,false)

}

下载功能第一次运行良好。但是,如果被触发,事件就会被累加,这使得它会多次下载文件。

worker.js 文件:-

let array = [];
self.addEventListener("message", event => {
    console.log(array);     
    if (event.data === "download") {
        const blob = new Blob(array);
        self.postMessage(blob);         
        array = [];
    } else {
        array.push(event.data);        
    }
})

标签: javascriptblob

解决方案


推荐阅读