You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同类多实例场景下如何等待某实例的输出并将结果传递给其他实例

问题根因

  1. 你当前的output方法逻辑完全和需求相反:你现在设计的是调用方传入参数赋值后返回,而你需要的是调用方什么都不传,从计算机实例里拿到已经生成的输出值。
  2. 你用了await关键字说明期望方法返回Promise,但当前方法是同步执行的,不会触发等待逻辑,调用时没传参就会直接拿到undefined。

改造方案

你需要给计算机类增加输出队列和等待回调的支持,实现异步等待输出的能力:

1. 给类增加初始化属性

在你的计算机类构造函数里新增两个字段:

class Computer {
  constructor() {
    // 原有初始化逻辑保留
    this.outputQueue = []; // 存储已经生成、还未被读取的输出值
    this.pendingOutputResolve = null; // 存储还没等到输出的调用方的回调
  }
}

2. 新增输出推送方法

当计算机执行到输出指令、生成了需要传给下一级的数值时,调用这个方法:

// 传入生成的输出值即可
pushOutput(value) {
  // 如果已经有调用方在等输出,直接把值传给回调完成等待
  if (this.pendingOutputResolve) {
    this.pendingOutputResolve(value);
    this.pendingOutputResolve = null;
    return;
  }
  // 没有调用方等待的话,先把值存到队列里
  this.outputQueue.push(value);
}

3. 改造output方法

把原来的output方法替换成下面的实现,不需要任何入参:

async output() {
  // 队列里有现成的输出,直接返回最早生成的那个
  if (this.outputQueue.length > 0) {
    return this.outputQueue.shift();
  }
  // 没有现成输出,返回Promise等待后续生成的输出
  return new Promise(resolve => {
    this.pendingOutputResolve = resolve;
  });
}

效果

你原来的调用代码不需要做任何修改,this.code[this.code[i + 1]] = await ampA.output()就会自动等待ampA生成下一个输出,再把值赋值给目标变量,完全适配5个实例循环传值的并发场景。

新手补充说明

  • await只能作用在Promise对象上,普通同步方法用await不会有等待效果,会直接同步执行完成
  • 如果你还没改造输入读取的逻辑,记得用同样的思路把输入读取也改成异步等待的模式,不然整个执行流程会卡住

内容的提问来源于stack exchange,提问作者Adam Z

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:54:03