【问题标题】:"await is not defined" error in Qt Web EngineQt Web 引擎中的“等待未定义”错误
【发布时间】:2020-09-25 09:18:37
【问题描述】:

我正在尝试在 Qt 的网络引擎中运行包含 await 的 Javascript 代码。这是一个说明我正在尝试做的最小示例:

QWebEngineView webView;
webView.page()->runJavaScript("await (new Promise(r => setTimeout(r, 100)))");

问题是,当我运行它时,我收到以下 Javascript 错误(Qt 在 Qt Creator 的控制台中记录):

js: Uncaught ReferenceError: await is not defined

当我第一次看到这个时,我以为是因为 Qt Web Engine 使用了不支持 await 的旧版 Chromium。但是使用my answer here的方法,我发现它使用的Chromium版本是Chromium 80,根据caniuseawait在Chromium 55及更高版本中支持,所以应该在Chromium中支持80.

所以我的问题是,为什么即使它使用应该支持 await 的 Chromium 版本,我也会收到此错误,我该如何解决?

【问题讨论】:

  • await 仅在 async 的函数中定义 - 虽然有一个顶级 await 的标志,但下面的答案是好的
  • @JaromandaX 你知道如何启用顶级等待吗?我检查了QWebEngineSettings,但在那里找不到任何东西。
  • 可能不在你所处的环境中

标签: javascript qt async-await chromium qtwebengine


【解决方案1】:

试试:

webView.page()->runJavaScript("(async () => await (new Promise(r => setTimeout(r, 100))))()");

【讨论】:

  • 这在我提供的示例中有效,但在我的真实代码中,我需要在await 之后返回一个值,并将其嵌入到async 函数中返回一个Promise 对象而不是我需要的值。
  • 你可以使用:const x = () => new Promise(r => setTimeout(r, 100)) 然后在异步函数中调用函数为(async () => { const z = await x(); })
  • 我最终使用console.log 将输出传递给C++ 代码,并使用this answer 获得该输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 2019-11-23
  • 2022-06-19
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多