如何在类中与Web Worker一起使用异步javascript代码

帕特里克

我写了一个javascript类,实例化后创建了一个Web worker。此类中的另一个方法运行worker。我想调用运行工作程序的方法,然后异步地执行某些操作。为了更好地理解,我在下面添加了原理图代码框架。

我试图在一个类变量中生成并存储一个Promise,然后对其执行操作,但这似乎是错误的ansatz。链接到JS Bin

class Task{
  constructor(){
    this.data = 0;
    //this.listen; //my idea, does not work
    this.worker = new Worker('worker.js');

    this.worker.onmessage = (function(e){
      // worker constantly emits messages
      let data = e.data.split(' ');
      // suppose message is now availabe as array
      this.data = data;

      if(data.includes("trigger")){
        //trigger signals that the heavy computation is over

        /* my idea didn't work:
        *this.listen = Promise.resolve(1);
        */
      }
    }).bind(this);
  }

  async doTask(){
    this.worker.postMessage("start computation");
    //wait for the worker to finish calculation
    /*my idea
    *await this.listen;
    */

    //do something after trigger was sent
    return 0;
  }
}
阿曼

也许像这样?

class Task{
  constructor(){
    this.data = 0;
    this.worker = new Worker('worker.js');
  }
  async calculation() {
    if (this.worker.onmessage === null) {
      return new Promise(resolve => {
        this.worker.onmessage = e => {
          let data = e.data.split(' ');
          // suppose message is now availabe as array
          this.data = data;

          if(data.includes("trigger")){
            this.worker.onmessage = null;
            resolve();
          }
        };
        this.worker.postMessage("start computation");
      });
    } else {
      console.log('One calc at a time please...');
    }
  }
  async doTask(){
    await this.calculation();

    //do something after trigger was sent
    return 0;
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

JavaScript ES6类与异步代码库一起使用吗?

如何在VSCode(Visual Studio代码)中一起调试HTML和JavaScript?

将AWS开发工具包与Web Worker一起使用

装饰器如何与python中的类一起使用

如何在API和Worker中将芹菜与不同的代码库一起使用

异步/等待如何与异步功能中的回调一起使用?

如何重写代码以将IAuthorizationFilter与依赖项注入一起使用,而不是将Asize Net Web Api中具有服务位置的AuthorizeAttribute一起使用?

如何使相机与javascript一起使用

如何转换此代码以与异步一起使用?

如何在JavaScript中将ArrayBuffers与DataViews一起使用

Web开发人员的JavaScript代码无法与我的html网站一起使用

如何在ionic中将异步数据与chart.js一起使用

如何迭代多个异步等待函数并在JavaScript中链接在一起?

为什么使用函数声明不能与Web Worker一起使用?

Javascript中的承诺与“ .then()”一起使用,但与异步/等待不一起使用

如何在JavaScript中与forEach一起使用promise.all?

承诺嵌套在异步函数中-为什么不仅与异步/等待一起使用?

如何在JavaScript中与Sweetalert一起使用Confirm函数

一起使用Javascript Web Worker和Async?

如何使此代码与loadStrings();一起使用?

如何在ASP.NET 4.0中将HttpClient异步方法与WebForm的RegisterAsyncTask一起使用?

如何在JavaScript中创建两个表并与不同的CSS一起使用?

如何在查询中创建全局变量并与JavaScript一起使用

我如何才能将这两个JavaScript代码一起使用?

解析javascript中API返回的复杂JSON数据编辑:它与PHP一起使用!代码已添加

代码与终端中的节点一起使用时,JavaScript文件无法工作

如何在rabbitmq 中组织交换和队列以与异步CQRS 总线一起使用

如何使此代码与 .each 函数一起使用?

如何在不创建 Promise 的情况下将 await 与异步函数一起使用?