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

如何将Fetch请求结果带出双层.then回调?

问题原因与解决方案

你的核心问题是第一个.then的回调没有返回内层的Promise,导致getList()返回的Promise在getOrderList()完成后就直接resolve了undefined,根本没等内层standardFetchCall的异步请求结束。

方案一:修正Promise链式调用

只需要在第一个.then里返回standardFetchCall(payload),让Promise链继续等待内层异步操作完成,数据就能自然传递到外层的.then:

// 去掉全局变量emptyList,用Promise返回数据更可靠
function getList() {
  return getOrderList()
    .then(payload => {
      // 返回内层Promise,让链式调用延续
      return standardFetchCall(payload);
    });
}

// 外层调用就能拿到正确数据
getList()
  .then(list => {
    console.log(list); // 现在能正常打印数据了
  })
  .catch(err => {
    // 务必添加错误处理,避免异步错误被忽略
    console.error('请求失败:', err);
  });

方案二:用async/await提升可读性

如果追求更简洁易读的代码,推荐使用async/await语法,把异步代码写成类似同步的结构:

async function getList() {
  // 等待getOrderList返回payload
  const payload = await getOrderList();
  // 等待standardFetchCall返回数据
  const list = await standardFetchCall(payload);
  // 返回数据给调用方
  return list;
}

// 调用方式
getList()
  .then(list => {
    console.log(list);
  })
  .catch(err => {
    console.error('请求失败:', err);
  });

// 或者在async函数里直接await调用(更简洁)
// async function handleList() {
//   try {
//     const list = await getList();
//     console.log(list);
//   } catch (err) {
//     console.error(err);
//   }
// }
// handleList();

额外提醒

不要用全局变量存储异步请求的数据,异步操作的执行时机不可控,全局变量很容易导致数据状态混乱。直接通过Promise返回或await获取数据才是可靠的做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:01:01