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

异步Fetch获取数据后,入队JS能否始终访问全局变量jsonObj?

问题确认:动态加载脚本能否稳定访问异步获取的全局变量

以下是main.js中的代码实现:

async function read() {   
    const response = await fetch('http://localhost/data.json');
    return response.text();
}

let jsonObj;
read().then((jsonStr) => {
    jsonObj = JSON.parse(jsonStr);
    enqueueJS();
});

function enqueueJS() {
    let script = document.createElement('script');
    script.src = '/data_process.js';
    document.body.appendChild(script);
}

需要确认:无论fetch请求耗时多久,data_process.js是否始终能访问到全局变量jsonObj?


结论:该方案始终有效

只要fetch请求最终成功完成,不管耗时长短,data_process.js都能稳定访问到赋值后的jsonObj,核心原因有两点:

  • 严格的执行顺序保证:fetch的.then回调只会在请求成功拿到响应文本、完成jsonObj赋值后才会执行,紧接着才会调用enqueueJS()触发data_process.js的加载。整个流程是串行的,不存在脚本先加载完成但jsonObj还未赋值的情况。
  • 浏览器脚本加载机制:动态创建的<script>标签被添加到DOM后,浏览器才会发起请求加载脚本文件,加载完成后才会执行脚本内的代码。此时jsonObj已经是完成赋值的全局变量,完全可以正常访问。

补充说明:如果fetch请求失败(比如网络异常、文件不存在),.then回调不会执行,jsonObj会保持初始的undefined,同时data_process.js也不会被加载。但这属于请求失败的异常场景,和“请求耗时多久”的前提无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 21:40:16