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

如何实现func1与func2双向值传递?解决空字符串传递问题

问题分析与解决方案

你的代码存在几个关键问题导致双向值传递失效:

  • 异步流程未同步:func2是异步操作(调用higher_fnc发起请求),但func1调用func2时没有等待其完成,直接执行arr.push(arg2),此时arg2还未被func2回传赋值。
  • 变量作用域错误:arr被声明在for (const x of d.data)循环内部,每次循环都会重新创建空数组,无法累积数据。
  • 语法错误:func1末尾多了一个多余的});,会导致代码无法正常运行。
  • 递归调用逻辑混乱:func2回调func1时传入空字符串作为第一个参数,但func1的核心逻辑依赖arg1发起请求,这会导致后续无意义的请求。

修正后的代码

const higher_fnc = (query_name) => {
  return axios({
    url: GraphQL_Endpoint,
    method: "post",
    headers: headers,
    data: query_name,
  });
};

// 让func1返回Promise,支持异步等待
const func1 = async (arg1, arg2) => {
  // 如果arg2有值,说明是func2回传的结果,直接处理
  if (arg2) {
    // 这里可根据需求处理回传的arg2,比如存入数组或做其他业务操作
    console.log("func2回传的结果:", arg2);
    return arg2;
  }

  // 初始调用时,arg1不为空,发起请求
  const d = await higher_fnc({
    query: query1,
    variables: {
      id: arg1
    },
  });

  // 将arr声明在循环外部,确保能累积数据
  const arr = [];
  for (const x of d.data) {
    for (const node of x.nodes) {
      if (node.id === "56789") {
        // 等待func2的异步结果返回
        const resultFromFunc2 = await func2(node.internalID);
        // 将func2返回的结果存入数组
        arr.push(resultFromFunc2);
      }
    }
  }

  // 返回处理后的数组,供外部调用者使用
  return arr;
};

// 让func2返回Promise,方便func1等待结果
const func2 = async (val) => {
  const d = await higher_fnc({
    query: query1, // 若需调用不同GraphQL查询,替换为对应query名
    variables: {
      id: val
    },
  });
  // 直接返回处理后的结果,而非递归调用func1
  return d.main;
};

关键改动说明

  1. 异步流程同步:使用async/await替代then链式调用,让func1可以等待func2的异步请求完成,拿到返回结果后再执行后续操作。
  2. 调整变量作用域:将arr移到外层循环外部,确保每次循环的结果都能被累积。
  3. 移除冗余递归:func2不再回调func1,而是直接返回处理后的结果,由func1主动接收并处理,避免逻辑混乱。
  4. 区分调用场景:func1通过判断arg2是否存在,区分是初始调用还是结果回传,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 00:21:30