当前位置: 首页 > 知识库问答 >
问题:

顶层等待不适用于节点14.13-

谢海阳
2023-03-14

我有节点14.13.0,并且即使使用--haric-top-level-wait,top-level wait也不能工作。

$ cat i.js
const l = await Promise.new(r => r("foo"))
console.log(l)

$ node -v
v14.13.0

$ node --harmony-top-level-await i.js
/Users/karel/i.js:1
const l = await Promise.new(r => r("foo"))
          ^^^^^

SyntaxError: await is only valid in async function
    at wrapSafe (internal/modules/cjs/loader.js:1001:16)
    at Module._compile (internal/modules/cjs/loader.js:1049:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:791:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
    at internal/main/run_main_module.js:17:47

我做错了什么?

共有2个答案

鲁鸿
2023-03-14

T. J.Crowder的回答是正确的,但是我建议将所有的. js更改为. mjs

例如,如果您像我一样使用NextJS,您将看到中的文件存在问题。next目录使用CommonJS(。next是使用npx next build)生成的,它们的扩展名是js,因此当。下一步文件使用require()

严成礼
2023-03-14

顶级的wait只适用于ESM模块(JavaScript自己的模块格式),而不适用于Node.js的默认通用模块。从您的堆栈跟踪中,您正在使用通用JS模块。

您需要将“type”:“module”放入包中。json或使用。mjs作为文件扩展名(我建议使用该设置)。

例如,使用这个包。json

{
  "type": "module"
}

而这个main.js

const x = await Promise.resolve(42);
console.log(x);

节点main.js显示42.

旁注:v14不需要——harmony顶级等待。13.0. 顶级等待在该版本中默认启用(在v14.8.0中启用)。

 类似资料:
  • 我在运行节点版本14.15.3

  • 问题内容: 我编写了量角器自动化测试并遇到了问题。Wait命令实际上并不等待数组元素之一。请参阅以下示例:导航到网页后,我尝试等待第一个元素。 但是测试失败,并显示以下错误:。 错误与定位器类型无关,因为它同时出现在:“ by.repeater”和“ by.css”上。选择器还可以,添加“ sleep”命令后测试通过: 另外,timeout参数也无济于事,它会忽略它并立即失败。 那么问题是如何等待

  • 问题内容: 我一直在浏览/ 在浏览了几篇文章之后,我决定自己测试一下。但是,我似乎无法绕开为什么这行不通的想法: 控制台输出以下内容(节点v8.6.0): 外部:[对象承诺] 内部:嘿 为什么函数内部的日志消息随后执行?我认为创建/ 的原因是为了使用异步任务执行同步执行。 有没有办法可以使用函数内部返回的值而不使用after ? 问题答案: 我似乎无法绕开为什么这行不通的想法。 因为回报承诺;所有

  • 问题内容: 我开始学习node.js,现在我只是想用node执行我的旧无节点应用程序。在这个应用程序中,我有一个html页面,其中的正文调用了onload js函数。工作正常。 现在我有一个节点应用程序:app.js,很简单: 在.html中,我仍然有: 但我要加载的功能不再加载。 有什么线索吗? 谢谢 问题答案: 您没有在问题中提供很多信息,但是根据您提供的信息,我几乎没有什么建议: 意见建议

  • 我试图找到问题的解决方案,但找不到,正在寻找一些“最佳实践范例”。我有一个nodejs express应用程序,我的函数被拆分成文件。例如,我有一个控制器(oktacontroller.js): 在两个导出的函数(都是快速路由)中,我都需要var-okta_-api_键。我知道我可以通过在这两个函数中查询它们来获得它们,因为它们是异步函数,我可以在那里使用wait,但是每次查询都感觉很愚蠢(因为它

  • 我忙于处理一些以意想不到的方式(对我)响应的代码。它涉及处理Node.jspromise异常。 我修改了下面的函数,这样它所做的就是失败 当我试图调用它并处理这个错误时,问题就出现了。如果我做了下面的事情,它会像我期望的那样工作,函数会失败,并执行返回的捕获,停止最后一个控制台日志的执行 尽管如此,如果我按照如下方式编写函数,它似乎不会返回,它仍然会执行最后一个控制台日志,而不考虑等待时间 如果这