Как я могу включить функцию Angle formatNumber в моего веб-работника? - PullRequest
0 голосов
/ 29 сентября 2018

Я начинаю изучать, как пользоваться веб-работниками, и использую пакет Angular2-Web-Worker , помогающий выполнять тяжелые работы в моих компонентах.

Я хочу иметь возможностьиспользовать функцию канала Angular formatNumber в веб-работнике вместе с другими конвейерами проекта в веб-работнике, например так:

import { formatNumber } from '@angular/common';

@Component({
    selector: 'my-component',
})
export class MyComponent implements OnInit {
    dataToManipulate: any;
    constructor(
        private webWorkerService: WebWorkerService, // From NPM: Angular2-Web-Worker
        private customPipe: CustomPipe,
    ) { }

    ngOnInit() {
        this.workerStart();
    }
    private workerFunction(input) {
        const data = input.dataToManipulate;
        const customPipe = input.customPipe;
        const formatNumber = input.formatNumber;
        let result;
        // Work
        // customPipe()
        // formatNumber()
        return result;
    }
    workerStart() {
        this.webWorkerService.run(this.workerFunction,
            {
                dataToManipulate: this.dataToManipulate,
                customPipe: this.customPipe.transform,
                formatNumber: formatNumber,
            }
        ).then(data => {
            console.log('Work Complete');
        });
    }
}

Это приводит к ошибке:

DataCloneError:Не удалось выполнить 'postMessage' для 'Worker':

Я узнал, что веб-работники используют алгоритм структурированного клона при отправке значений через postMessage () , который не позволяет пересылать функции.

Как я могу переслать свою функцию customPipe и Angular formatNumber в рабочий веб-поток?Я также ищу рабочую демонстрацию в ответ, если возможно, спасибо.

...