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
相关产品推荐
相关产品推荐

