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

fetch与XMLHttpRequest调用API问题:numeroOT方法无法获取工单数据求助

解决numeroOT()方法返回undefined的异步处理问题

看起来你遇到的核心问题是异步代码的处理不当——fetch()是异步操作,你的numeroOT()方法还没等到请求完成就提前返回了,所以才会得到undefined。咱们一步步来修复:

1. 先修正numeroOT()的异步逻辑

你测试里的fetch代码能正常运行,是因为你用了await等待请求完成,但把这段逻辑移到方法里时,大概率没正确处理异步返回。

错误写法(推测你原来的代码)

这种写法里,fetch是异步执行的,方法本身没有返回值,默认就会返回undefined:

function numeroOT() {
  fetch('http://localhost:3000/ots')
    .then(response => response.json())
    .then(orden => {
      const laOrden = orden[orden.length-1];
      const elNumero = laOrden.numero_ot;
      // 生成工单号的逻辑
    });
  // 这里没有返回任何内容,默认返回undefined
}

正确写法:让方法返回Promise

你可以用async/await简化异步逻辑,让方法明确返回处理后的工单号:

async function numeroOT() {
  try {
    // 等待API请求完成
    const response = await fetch('http://localhost:3000/ots');
    // 处理API错误状态
    if (!response.ok) {
      throw new Error(`API请求失败:${response.status}`);
    }
    const orden = await response.json();
    
    // 处理空数组的边界情况(避免访问orden[-1]报错)
    if (!orden || orden.length === 0) {
      // 如果没有历史工单,生成初始工单号,比如'1/2024'
      return `1/${new Date().getFullYear()}`;
    }

    // 获取最后一条工单并生成新工单号
    const laOrden = orden[orden.length - 1];
    const elNumero = laOrden.numero_ot;
    const [currentNum, currentYear] = elNumero.split('/');
    const newNum = parseInt(currentNum) + 1;
    return `${newNum}/${currentYear}`;
  } catch (error) {
    console.error('生成工单号时出错:', error);
    throw error; // 把错误抛出去,让调用者可以处理
  }
}

2. 修改测试代码,正确等待异步结果

因为numeroOT()现在是异步函数(返回Promise),你需要在测试里用await等待它执行完成,才能拿到正确的返回值:

describe('TEST logica.js', function () { 
  it('Genero el Nº de Orden', async () => { 
    // 关键:用await等待numeroOT()完成
    var numeroDeOT = await laLogica.numeroOT(); 
    console.log(numeroDeOT); 
    expect(numeroDeOT).to.be.a('String'); 
  }); 
});

额外注意事项

  • 永远不要忽略异步操作的错误处理:比如API请求失败、返回空数组、工单号格式不符合预期等情况,都要提前处理,避免程序崩溃。
  • 如果你的项目里有多个地方需要调用API,建议把fetch逻辑封装成单独的工具函数,避免重复代码,也方便统一处理错误和请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:15:41