javascript - 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()
的也没有被执行......不知道我做错了什么......
解决方案
推荐阅读
- python - 如何在 Django 模型中添加动态 Numpy 数组字段
- pine-script - 错误:“....应该在每次计算中调用以保持一致性。建议从这个范围中提取调用”
- django - 如何让 django 使用弹性 beanstalk 和 apache 在 https 上工作?
- azure-percept - 与 Azure Percept DK 访问点的连接经常断开
- python - 查找重复项并创建映射
- mysql - 如何显示 MySQL 表行中不为空的记录数?
- css - 如何在引导映射中浮动文本
- httpclient - HttpClient Time_wait
- javascript - 如何在 Ionic / JavaScript 中解析 Authorize.net 支付响应?
- three.js - 用 Threejs 隐藏 Mesh 的交集