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

调用另一函数内的异步方法后返回值始终为undefined怎么解决?

问题诱因
  • 异步操作时序不匹配:fetchData属于异步网络请求,其.then()回调会在请求完成后才执行,而作为普通同步函数的repeatsChecker不会等待异步请求完成,会直接返回刚初始化的空数组api_data_values。
  • await关键字仅对Promise类型生效:repeatsChecker默认返回普通数组,await不会做任何等待处理,直接返回空数组,因此访问test[0]得到undefined,依赖数组内容的判断逻辑也全部不符合预期。
解决方法

将repeatsChecker改造为异步函数,等待fetchData请求完成并处理完数据后再返回结果,可选两种写法:

  1. async/await写法(更易读)
async function repeatsChecker() {
  let api_data_values = []
  // 等待异步请求返回结果后再执行后续逻辑
  const data = await fetchData()
  for (let i = 0; i < data.length; i++) {
    api_data_values.push(data[i].name)
  }
  return api_data_values
}

// 测试代码无需改动
async function test() {
  let name = "Joe"
  let test = await repeatsChecker();
  console.log(test[0])
}

test()
  1. 链式Promise写法
function repeatsChecker() {
  // 直接返回Promise对象,让外部await可以等待数据处理完成
  return fetchData().then(data => {
    const api_data_values = []
    for (let i = 0; i < data.length; i++) {
      api_data_values.push(data[i].name)
    }
    return api_data_values
  })
}

两种写法都可以保证await repeatsChecker()返回的是填充完成的数组,不会出现undefined问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:36:02