簡體   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