[英]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.