addEventListener запускается несколько раз - PullRequest
1 голос
/ 12 июля 2020

Итак, я пытаюсь преобразовать большой двоичный объект в настоящий файл. Чтобы уменьшить нагрузку на поток, я создал файл worker. js, который прослушивает событие, затем помещает данные события в массив и, наконец, преобразует их в большой двоичный объект.

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)

}

Функция загрузки отлично работает для первый раз. Но затем, если срабатывает, событие складывается, что заставляет его загружать файл несколько раз.

Рабочий. 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);        
    }
})
...