首页 > 解决方案 > Node.js:具有 Promises 和异步函数管理器的线程工作者

问题描述

我目前正在尝试制作一个包含经理和一些工人的简单程序。经理检查工人计算的值。我开始理解并推动 Async 功能的极限。我不确定这是我的逻辑问题还是实现问题。

代码主要由两个类组成,Manager 和 Worker。经理的目标是管理一系列工人。此外,当工人完成时,它只会打印出它已经完成了工作,或者工人有 50/50 的机会会产生一个新的工人。

工人有一个标志,说明它是否正在工作或是否可以重新运行。worker 运行的默认值cool_function是 simple 1 + 1

class Worker {
  constructor(cool_function) {
    this.cool_function = cool_function;
  }

  async run() {
    return this.cool_function();
  }

  getWorking() {
    return this.working;
  }
}

class Manager {
  constructor() {
    this.workers = [];
  }

  addWorker(cool_function = (async() => {return 1 + 1})) {
    this.workers.push(new Worker(cool_function));
  }

  async run() {
    while(true) {
      for(var i = 0; i < this.workers.length; i++) {
        let work = this.workers[i].run();
        work.then((function(value) {
          console.log("Worker #" + i + " did the work and got: " + value + "!");
          if(Math.random() > .5) {
            console.log("Worker #" + i + " just spawned a new worker(Worker #" + (this.workers.length + 1) + ")");
            this.workers.push(new Worker());
          }
        }).bind(this));
      }
    }
  }
}

async function runManager() {
  let manager = new Manager();
  manager.addWorker();
  manager.run();
}

runManager();

最终发生的是while循环永远不会终止,就像假设的那样,但是,我console.log()的也没有被执行......不知道我做错了什么......

标签: javascriptnode.jsmultithreadinges6-promise

解决方案


推荐阅读