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

JS异步函数callAPI调用API后,如何将JSON结果存入变量?

问题解决:async函数返回Promise而非JSON的处理

核心原因

所有async函数的返回值都会被自动包装成Promise,哪怕你return的是普通值。所以直接赋值alldocs1 = callAPI(...)得到的必然是Promise,而非实际的JSON数据。

第一步:优化callAPI函数

你当前的代码混用了await和.then(),既冗余又容易出错,建议统一用await风格重构:

async function callAPI(url, data) {
  try {
    const response = await fetch(url, {
      method: "POST",
      body: JSON.stringify(data),
      headers: {
        "Content-Type": "application/json"
      }
    });
    // 先检查响应状态是否正常
    if (!response.ok) {
      throw new Error(`请求失败:${response.status}`);
    }
    const result = await response.json();
    console.log(result);
    return result;
  } catch (error) {
    console.error("请求出错:", error);
    // 抛出错误让调用方处理,也可返回默认值
    throw error;
  }
}

第二步:正确获取函数返回结果

有两种常用方式获取Promise的实际值:

方式1:使用await(推荐,代码更简洁)

如果你的JS Notebook支持顶级await(大部分现代环境都支持),直接在顶层用await:

// 直接用await获取结果
const alldocs1 = await callAPI("/api/allDocs/", {
  "portal_type": ["Quality Control Declaration"]
});

const alldocs2 = await callAPI("/api/allDocs/", {
  "portal_type": ["Defect Declaration Operation"],
  "creation_date": "2022-08-22"
});

console.log(alldocs1); // 现在是JSON数据
console.log(alldocs2);

如果环境不支持顶级await,就用立即执行的async函数包裹:

(async function() {
  const alldocs1 = await callAPI("/api/allDocs/", {
    "portal_type": ["Quality Control Declaration"]
  });

  const alldocs2 = await callAPI("/api/allDocs/", {
    "portal_type": ["Defect Declaration Operation"],
    "creation_date": "2022-08-22"
  });

  console.log(alldocs1);
  console.log(alldocs2);
})();

方式2:使用.then()链式调用

这是传统Promise处理方式,适合不能用await的场景:

callAPI("/api/allDocs/", {
  "portal_type": ["Quality Control Declaration"]
}).then(data => {
  const alldocs1 = data;
  console.log(alldocs1);
}).catch(err => {
  console.error(err);
});

callAPI("/api/allDocs/", {
  "portal_type": ["Defect Declaration Operation"],
  "creation_date": "2022-08-22"
}).then(data => {
  const alldocs2 = data;
  console.log(alldocs2);
}).catch(err => {
  console.error(err);
});

额外优化:并行请求

如果两个API请求互不依赖,用Promise.all()并行调用能大幅提升速度:

// 同时发起两个请求,等待全部完成后获取结果
const [alldocs1, alldocs2] = await Promise.all([
  callAPI("/api/allDocs/", { "portal_type": ["Quality Control Declaration"] }),
  callAPI("/api/allDocs/", { 
    "portal_type": ["Defect Declaration Operation"],
    "creation_date": "2022-08-22"
  })
]);

console.log(alldocs1, alldocs2);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:54:25