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

如何将fetch响应赋值给全局变量?为何async函数返回Promise且加await报错?

问题解答

1. 为什么调用loadUsers()会返回Promise?

所有用async关键字声明的函数,不管内部有没有写await,都会自动把返回值包装成Promise对象返回。哪怕你在函数里直接return 123,最终得到的也是Promise.resolve(123)。你的loadUsers是async函数,所以调用它必然得到Promise,而非直接的字符数据。

2. 给loadUsers()加await报错的原因?

await只能在async函数内部或者ES模块的顶层作用域中使用。如果你的代码是在普通全局作用域(比如非模块类型的script标签里)直接写let chars = await loadUsers(),就会触发语法错误——因为当前上下文不是async函数。

错误示例:

// 普通全局作用域,执行会报错
let chars = await loadUsers();

3. 如何将fetch响应赋值给全局变量?

有两种实用方案:

方案一:用自执行async函数包裹

把赋值逻辑放在async函数内部,或者直接用自执行的async函数:

const loadUsers = async () => {
  const res = await fetch('https://www.breakingbadapi.com/api/characters')
  const json = await res.json()
  return json
}

// 提前声明全局变量
let chars;

// 自执行async函数完成赋值
(async () => {
  chars = await loadUsers();
  // 这里可以安全使用chars
})();

方案二:借助Promise的then方法

利用Promise链式调用,在回调里完成全局变量赋值:

const loadUsers = async () => {
  const res = await fetch('https://www.breakingbadapi.com/api/characters')
  const json = await res.json()
  return json
}

let chars;
loadUsers().then(data => {
  chars = data;
  // 回调内可以直接使用chars
});

注意:两种方式下chars的赋值都是异步操作,在赋值完成前直接访问会得到undefined,必须确保在异步操作完成后再使用该变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:24:21