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

顶级等待不工作在节点JS 14.15.3

丁文轩
2023-03-14

我在运行节点版本14.15.3

欢迎来到Node。jsv14。15.3.

我觉得现在可以在顶级脚本中使用wait很酷,所以我尝试了一下。不出所料,它没起作用。

const myfunc = async () => {
    return new Promise((res, rej) => {
        setTimeout(() => {res()},1000)
    })
}
await myfunc();

SyntaxError:await仅在模块的wrapSafe(internal/modules/cjs/loader.js:979:16)的异步函数中有效_在对象处编译(internal/modules/cjs/loader.js:1027:27)。模块_扩展。。模块处的js(internal/modules/cjs/loader.js:1092:10)。在函数处加载(内部/modules/cjs/loader.js:928:32)。模块_在函数处加载(内部/modules/cjs/loader.js:769:14)。位于internal/main/run_main_模块的executeUserPoint[as runMain](internal/modules/run_main.js:72:12)。js:17:47

不知道还能说什么。它只是不工作...它碎了吗?它真的有用吗?


共有1个答案

丁均
2023-03-14

顶级wait在ECMAScript模块中工作。默认情况下,NodeJS不使用这些模块,而是使用CommonJS模块。有几种方法可以在节点项目中启用ES6模块,如下所述:

当传递给节点作为初始输入时,或者当ES模块代码中的导入语句引用时,Node.js将把以下内容视为ES模块:

>

  • 以. mjs结尾的文件。

    当最近的父package.json文件包含一个值为“模块”的顶级字段“类型”时,以. js结尾的html" target="_blank">文件。

    字符串作为参数传递到--eval或--print,或通过STDIN管道传递到节点,标记为--input type=module

    如果您使用上述方法之一在项目中启用ES6模块,那么您将能够使用顶级WAIT:

    剧本mjs(请注意.mjs):

    const myfunc = async () => {
      return new Promise((res, rej) => {
          setTimeout(() => {res("Hello")}, 1000)
      })
    }
    console.log(await myfunc()); // logs "Hello" after ~1s
    

  •  类似资料:
    • 我有节点14.13.0,并且即使使用,top-level wait也不能工作。 我做错了什么?

    • Node.js(2020年1月,Node.js13.5.0)是否仍然不支持顶级? 我试过一些教程,比如这一个,但仍然不走运,总是出现同样的错误: 整个文件内容: 我已经尝试使用在,并将文件重命名为,但仍然相同的错误,即使与最新的Node.js13.5.0 我做错了什么?

    • 在某些情况下,当我在一个js文件环境中工作时,例如,油脂猴脚本,我想添加一个节点测试运行程序(mocha)。Js非常灵活,允许处理这两种环境。做一些类似于: 这种方法很好,因为我可以简单地在另一个文件中编写mocha测试: 但我也可以将脚本复制粘贴到单个js环境中。 我面临的问题是,我想在允许顶级等待的环境中做类似的事情。如果我尝试执行上一个示例,我会得到一个SyntaxError

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

    • 我在Unity中制作了一个2d游戏,我正在使用此代码实例化敌人 在这段代码中,IENumator方法正在执行它们的工作,但没有产生返回新的WaitFor秒。意味着如果我在Unity中运行它,敌人会在每一帧中实例化。我该怎么解决呢?

    • Appium运行速度快,我无法执行wait命令,请查看下面的Appium日志,我正在使用下面的wait,感谢您提前提供的帮助。