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

使用try...catch处理两次连续API调用的语法有效性问询

代码语法有效性与throw执行逻辑解析

一、代码语法问题

你提供的代码存在两处语法错误,修正后才能正常运行:

  1. 字符串中的单引号未转义:
    错误写法:throw new Error('First call didn't work');
    这里didn't里的单引号和外层包裹字符串的单引号冲突,导致语法解析失败。可以改成两种形式:
    • 转义内部单引号:throw new Error('First call didn\'t work');
    • 用双引号包裹字符串:throw new Error("First call didn't work");
  2. 冗余的分号:if-else代码块结尾的分号(};)是多余的,虽然不会触发语法错误,但不符合JS编码规范,建议删除。

另外,代码中的fetch(...)是占位符,实际使用时需要替换为有效的请求参数(比如目标URL、配置对象),否则运行时会抛出参数错误。

修正后的示例代码:

async apiCalls () {
  try {
    const firstCall = await fetch('https://example.com/get-user-id');
    if(firstCall.ok) {
      const userId = await firstCall.json();
      // 处理用户ID逻辑
    } else {
      throw new Error("First call didn't work");
    }
    
    const secondCall = await fetch(`https://example.com/submit/${userId}`, {
      method: 'POST',
      body: JSON.stringify({/* 提交数据 */})
    });
    if(secondCall.ok) {
      // 处理提交成功逻辑
      return;
    } else {
      throw new Error("Second call didn't work");
    }

  } catch (error) {
    alert(error.message);
  }
}

二、throw语句的执行逻辑

当执行throw语句后,会立即终止当前try块内的后续代码执行,直接跳转到对应的catch(error)块中处理错误。

比如如果第一个请求失败触发throw,那么secondCall的定义、调用等后续代码都不会执行,程序直接进入catch块执行alert(error)逻辑。这种流程完全符合你描述的「先获取用户ID、再用ID提交信息」的场景,能保证任何一步出错都及时终止流程并处理错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:42:21