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

TypeScript报错:'await'仅允许在async函数内使用,求解决方案

解决'Await expression is only allowed within an async function'报错

这个报错我之前也碰到过,核心原因很明确——await关键字只能在被async修饰的函数内部,或者ES模块的顶层作用域中使用。你的代码里,await GetTMS(fymcl, this.model)这一行是在普通的非async上下文(比如全局作用域或普通函数里)执行的,所以触发了这个错误。

下面给你两种针对性的解决方案:

方案1:把调用逻辑包裹在async函数里

这是最通用的解决方式,不管你是在全局作用域还是普通函数里,都可以把用到await的代码放进一个async函数中:

// 定义一个async函数来处理数据获取逻辑
async function fetchAndProcessTMS() {
  try {
    let tmsValue = await GetTMS(fymcl, this.model);
    console.log("tmsValue", tmsValue);
    // 这里可以添加更多对tmsValue的处理逻辑
  } catch (err) {
    console.error("获取TMS数据失败:", err);
  }
}

// 调用这个async函数
fetchAndProcessTMS();

// 你的GetTMS函数可以保留(也可以简化一下,去掉冗余的async声明,因为它直接返回Promise)
const GetTMS = function(yearMetricCombo, modelData) {
  return new Promise((resolve, reject)=>{
    modelData
      .query("11111")
      .where("fymcl").equals(yearMetricCombo)
      .loadAll()
      .exec((error, data) => {
        error ? reject(error) : resolve(data);
      });
  });
}

方案2:使用顶层await(仅限支持ES模块的环境)

如果你的代码是在ES模块中(比如Node.js里设置了"type": "module",或者浏览器中用<script type="module">加载),可以直接在顶层使用await,不需要包裹函数:

// 注意:仅在ES模块环境下可用
try {
  let tmsValue = await GetTMS(fymcl, this.model);
  console.log("tmsValue", tmsValue);
} catch (err) {
  console.error("获取TMS数据失败:", err);
}

const GetTMS = function(yearMetricCombo, modelData) {
  return new Promise((resolve, reject)=>{
    modelData
      .query("11111")
      .where("fymcl").equals(yearMetricCombo)
      .loadAll()
      .exec((error, data) => {
        error ? reject(error) : resolve(data);
      });
  });
}

额外提示

  • 记得给async函数加上错误处理(比如try/catch或者.catch()),避免未捕获的Promise异常。
  • 你的GetTMS函数原本加了async声明,但其实它直接返回Promise,async是冗余的,可以去掉,不影响功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:37:08