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

node.js在使用“await”而不使用“async”时显示不清晰的错误

唐阳飙
2023-03-14

这段代码有错误

exports.getResults = (req, res) => {
    status = await miDealApi.getResults()
    res.json({
        status: status
    })
}

问题是,我使用了'await'而没有将方法声明为'async',但是node.js给我的错误非常不清楚,根本没有帮助我弄清楚它。

internal/modules/cjs/loader.js:999
    throw err;
    ^

[wrapSafe (internal/modules/cjs/loader.js:979:16),Module._compile
(internal/modules/cjs/loader.js:1027:27),Object.Module._extensions..js
(internal/modules/cjs/loader.js:1092:10),Module.load 
(internal/modules/cjs/loader.js:928:32),Function.Module._load
(internal/modules/cjs/loader.js:769:14),Module.require
(internal/modules/cjs/loader.js:952:19),require
     (internal/modules/cjs/helpers.js:88:18),Object.<anonymous> (C:\Users\user\Documents\DT\projects\suresort-manager\controllers\waveFactory.js:6:30),Module._compile 
(internal/modules/cjs/loader.js:1063:30),Object.Module._extensions..js
(internal/modules/cjs/loader.js:1092:10)]
PS C:\Users\user\Documents\DT\projects\suresort-manager>

我能做些什么来让类似这样的错误在将来变得更清楚吗?

共有1个答案

曾丰茂
2023-03-14

一种可能是您的node.js版本有点旧,因此不会给您提供正确的错误。

运行节点12,我得到:

/project/foo.js:2
  status = await miDealApi.getResults()
           ^^^^^

SyntaxError: await is only valid in async function
    at wrapSafe (internal/modules/cjs/loader.js:915:16)
    at Module._compile (internal/modules/cjs/loader.js:963:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
    at Module.load (internal/modules/cjs/loader.js:863:32)
    at Function.Module._load (internal/modules/cjs/loader.js:708:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
    at internal/main/run_main_module.js:17:47

所以你可能想检查一下你的版本?

node -v
12.21.0

您应该始终以至少使用稳定版本为目标。

 类似资料:
  • 编辑:在测试用例5中,任务似乎处于状态。 我在.NET 4.5中使用System.net.http.HttpClient时遇到了一些奇怪的行为--其中“等待”调用的结果(例如)将永远不会返回。 只有在使用新的Async/Await语言功能和任务API的特定情况下才会出现这种情况--代码似乎总是在只使用延续时工作。

  • 我在想,这两者之间没有区别: 和 但是如果没有async/await,函数将返回void,如果发生异常,我将得到以下结果: (节点:62777)未处理的PromisejectionWarning:未处理的promise拒绝。此错误源于在没有catch块的情况下抛出异步函数的内部,或者拒绝使用未处理的promise。catch()。在未处理的promise拒绝时终止节点进程。(节点:62827)[D

  • 我有一个安装了ReactJS的NetCore2应用程序。 null VS代码抛出一个错误,告诉我异步只适用于。ts文件。另外,如果我在任何其他函数中使用await,我将得到一个错误,比如。 据我所知,async/await不仅仅是TS...(或者我错了?)。 谢了!

  • 问题内容: 我正在尝试为Node v6.9.2配置Babel。我想使用/ 构造。 因为我是Babel和所有Node基础架构的新手,所以我对如何正确配置它感到困惑: 我应该使用什么预设?ES6的大多数功能已经实现了Node。因此,出于性能原因,我不希望Babel移植Node 6.9.x已经支持的功能(箭头功能,新的导入机制等)。 我应该包括哪些插件,以便可以使用异步/等待?我也感到困惑,因为经过一番

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 我已经复习了/,在复习了几篇文章之后,我决定自己测试一下。然而,我似乎无法理解为什么这不起作用: 控制台输出以下内容(节点V8.6.0): >外:“对象承诺” >内部:嘿那里 为什么函数内部的日志消息会在之后执行?我认为创建/的原因是为了使用异步任务执行同步执行。 有没有一种方法可以使用函数内部返回的值,而不用后面的?