[英]plainToClass to call object.method() in web worker thread
我正在使用角度,试图将一个对象传递给后台进程的网络工作者。 班级是
Article{
method1();
propertyA;
}
addEventListener('message', ({ data }) => {
// if without plainToClass, how to call article.method1()
data.article=plainToClass(Article, data.article);
console.log(data.article.method1());
});
因为在web worker线程中,我要使用article.method1(),
对象传递给web worker后,就变成了一个没有方法只有属性的对象。 为什么是这样? 作为字符串传递?
尝试使用plainToClass()
将传递的 obj 转换为带有方法的对象,在主线程中我可以这样做,加载字符串并转换为 Class 对象。 但在网络工作者中,它抱怨Reflect.getMetadata is not a function
。 似乎在polyfills.ts
中找不到导入import 'reflect-metadata'
回答:
事实证明我需要在文章类文件中导入它
import 'reflect-metadata';
export class Article implements Clonable{
}
将数据传递给 Web 工作者是通过序列化对象来完成的,因此您将无法传递行为。 相反,您需要像在示例中那样使用plainToClass
,或者您可以在辅助函数中提供该功能。
此外, import reflect-metadata
是副作用的导入。 此代码在每个 context 运行一次,因此需要在 worker中再次运行,然后plainToClass
应该可以工作。
也就是说,一种更简单的方法可能是尝试使用传入的值调用类构造函数——如果可能的话?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.