我正在尝试使用在 Node v14.8 中添加的新顶级等待。
我知道 IIFE 是过去的首选解决方法之一,但这个问题是关于新的顶级等待功能以及为什么尽管已与 Node 14.8 一起发布但它仍会抛出错误
我正在将我的 Axios 实例从我的控制器中提取到一个独立的服务中。在该服务文件中,我试图实例化然后导出一个 Axios 实例,该实例是使用来自 Spotify 的 API 的存储授权标头创建的。因为它随后被导入到我的控制器中(传递到构造函数然后它导出new SpotifyApiController(SpotifyApiService)
)并且导入是同步的,所以我试图使用新的顶级等待功能在启动/导入时完全实例化它,但出现以下错误:
[nodemon] starting `babel-node bin/www.js --harmony-top-level-await --experimental-repl-await`
E:\projects\harmonic-mixing-companion\server\services\SpotifyApiService.mjs:117
var SpotifyApiService = await createApiService();
^^^^^
SyntaxError: await is only valid in async function
at wrapSafe (internal/modules/cjs/loader.js:979:16)
at Module._compile (internal/modules/cjs/loader.js:1027:27)
at Module._compile (E:\projects\harmonic-mixing-companion\server\node_modules\pirates\lib\index.js:99:24)
at Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Object.newLoader [as .mjs] (E:\projects\harmonic-mixing-companion\server\node_modules\pirates\lib\index.js:104:7)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (E:\projects\harmonic-mixing-companion\server\controllers\/SpotifyApiController.js:1:1)
从错误来看,babel-node 似乎自从const SpotifyApiService = ...成为var SpotifyApiService = .... 我也添加"@babel/plugin-syntax-top-level-await"到我的babel.config.json.
该服务的文件扩展名为.mjs. 我也尝试过"type": "module"在服务器的 package.json 中进行设置,但这也没有结果。如果我错了请纠正我,但是将我的整个后端服务器设置为模块对我来说也不合适,因为它对我来说听起来不像一个模块化单元(相对于可重用的)SpotifyApiService。
console.log(process.version);在我的主入口文件的顶部仔细检查了我的节点版本,它打印了预期的 14.14.0 版本。
慕田峪9158850
互换的青春
叮当猫咪
相关分类