plainToClass 在网络工作线程中调用 object.method()
plainToClass to call object.method() in web worker thread
我正在使用 angular,试图将对象传递给后台进程的网络工作者。
class 是
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目的。但在 web worker 中,它抱怨 Reflect.getMetadata is not a function
。似乎在 polyfills.ts
中找不到导入的 import 'reflect-metadata'
答案:
原来我需要在文章class文件中导入这个
import 'reflect-metadata';
export class Article implements Clonable{
}
将数据传递给 Web worker 是由 serializing the object 完成的,因此您将无法传递行为。相反,您需要像示例中那样使用 plainToClass
,或者您可以在辅助函数中提供功能。
此外,import reflect-metadata
是 side-effects 的导入。此代码是 run once per context,因此需要在 worker 内部再次 运行 ,然后 plainToClass
应该可以工作。
也就是说,更简单的方法可能是尝试使用传入的值调用 class 构造函数 - 如果可能的话?
我正在使用 angular,试图将对象传递给后台进程的网络工作者。 class 是
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目的。但在 web worker 中,它抱怨Reflect.getMetadata is not a function
。似乎在polyfills.ts
import 'reflect-metadata'
答案:
原来我需要在文章class文件中导入这个
import 'reflect-metadata';
export class Article implements Clonable{
}
将数据传递给 Web worker 是由 serializing the object 完成的,因此您将无法传递行为。相反,您需要像示例中那样使用 plainToClass
,或者您可以在辅助函数中提供功能。
此外,import reflect-metadata
是 side-effects 的导入。此代码是 run once per context,因此需要在 worker 内部再次 运行 ,然后 plainToClass
应该可以工作。
也就是说,更简单的方法可能是尝试使用传入的值调用 class 构造函数 - 如果可能的话?