繁体   English   中英

plainToClass 在 web 工作线程中调用 object.method()

[英]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(),

  1. 对象传递给web worker后,就变成了一个没有方法只有属性的对象。 为什么是这样? 作为字符串传递?

  2. 尝试使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM