Я начинаю изучать, как пользоваться веб-работниками, и использую пакет 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 в рабочий веб-поток?Я также ищу рабочую демонстрацию в ответ, если возможно, спасибо.