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

Uncaught SyntaxError:await调用async函数报错,需优先加载页面内容

解决思路

方案1:使用立即执行的异步函数(IIFE)

这是最直接修复语法错误的方式,将await包裹在一个自执行的async函数中,既符合语法规则,又能执行异步操作:

<div id="divProducts"></div>
<script>
(async () => {
  try {
    await LoadProducts();
    // 产品加载完成后,可在此执行后续逻辑
  } catch (err) {
    console.error('产品加载失败:', err);
  }
})();
</script>

注意:这种方式下,后续脚本仍会同步执行,如果需要确保后续脚本在产品加载完成后再运行,需结合方案3的动态加载逻辑。

方案2:将脚本标记为ES模块

ES模块允许在顶层作用域使用await,只需给script标签添加type="module"属性:

<div id="divProducts"></div>
<script type="module">
  try {
    await LoadProducts();
    // 产品加载完成后的逻辑
  } catch (err) {
    console.error('产品加载失败:', err);
  }
</script>

提示:模块脚本默认是延迟执行(defer)的,会在DOM解析完成后运行;如果你的LoadProducts定义在外部JS文件中,需要通过import语句引入(确保全局可用的话可跳过)。

方案3:用Promise的.then()控制执行顺序

由于LoadProducts返回Promise,可通过.then()明确控制后续代码/脚本的执行时机,完美匹配你“在其他脚本运行前加载内容”的需求:

<div id="divProducts"></div>
<script>
LoadProducts()
  .then(() => {
    // 产品加载完成后,动态加载并执行后续脚本
    const nextScript = document.createElement('script');
    nextScript.src = '你的后续脚本路径.js';
    // 若后续是内联脚本,可直接写在这里:
    // console.log('产品加载完成,执行后续逻辑');
    document.body.appendChild(nextScript);
  })
  .catch(err => {
    console.error('产品加载失败:', err);
  });
</script>

这种方式能确保后续脚本只有在产品加载完成后才会执行,完全满足你的顺序要求。

额外优化建议

你的LoadProducts函数本身是async函数,但手动创建了Promise,可简化写法(不影响功能,仅代码更简洁、语义更清晰):

async function LoadProducts() {
  return new Promise((resolve, reject) => {
    PageMethods.set_path('/xxx/xxxx.aspx');
    PageMethods.GetToken(OnSuccess, OnError);

    function OnSuccess(Token) {
      const settings = {
        "url": "xxx",
        "method": "POST",
        "timeout": 0,
        "headers": {
          "Token": Token,
          "Content-Type": "application/json; charset=UTF-8"
        },
        "data": JSON.stringify({
          "xxx": xxx
        }),
      };

      $.ajax(settings).done(function (response) {
        $("#divProducts").append(response); // 注意:原代码用了Ret,应该是response
        resolve('');
      }).fail(reject); // 捕获ajax请求错误,避免静默失败
    }

    function OnError(Error) {
      reject('error'); // 用reject而非resolve,更符合Promise错误处理语义
    }
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:31:02