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

为什么我的async异步函数返回undefined且执行顺序不符合预期?

问题原因分析
  • 函数返回undefined的核心原因
    你的test1函数没有显式写return语句。then回调里的return只是将用户ID返回赋值给了内部的fetchPromise变量,但整个async函数没有把这个值向外返回,async函数无return时默认返回值为undefined的Promise对象。
    另外判断逻辑里你写的是await test1,没有加()调用函数,这里await的是函数对象本身,不是函数执行返回的Promise,自然不可能和字符串"43000480694"相等,所以直接输出NO。
  • 输出顺序不符的原因
    JS基于单线程事件循环模型运行,异步任务会等待所有同步代码执行完成后才会执行:
  1. 同步执行if判断时,await test1拿到的是函数对象,和字符串比对失败,直接同步输出NO
  2. 同步执行test1()调用,async函数执行到await的fetch语句前会立刻返回Pending状态的Promise,所以控制台此时打印出Promise
  3. 所有同步代码执行完成后,fetch异步请求拿到响应,才会执行后续的then链逻辑打印用户ID,所以最后才输出43000480694
修正代码

async/await是Promise的语法糖,不需要和then混用,拆分写await可读性更高:

async function test1() {
  const response = await fetch("https://www.instagram.com/boarirkeerd/?__a=1", {})
  const jsonData = await response.json()
  const userId = jsonData.graphql.user.id
  console.log(userId)
  return userId // 显式向外返回用户ID
};

// await只能在async函数内部使用,全局环境可以用自执行async函数包裹
(async () => {
  if (await test1() === "43000480694") { // 加()执行test1函数
    console.log("YES")
  } else {
    console.log('NO')
  }
  test1()
})()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:15:03