亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Node v14.14.0 中使用頂級等待功能時

在 Node v14.14.0 中使用頂級等待功能時

一只甜甜圈 2023-05-25 18:04:58
我正在嘗試使用在 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:117var 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 版本。
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

您可以將其包裝在異步函數中:

var SpotifyApiService = (async()=> await createApiService())();

在你可以使用than, catch之后


查看完整回答
反對 回復 2023-05-25
?
互換的青春

TA貢獻1797條經驗 獲得超6個贊

如文檔所示,babel 僅啟用此功能的“語法”,

僅語法

此插件僅啟用此功能的解析。Babel 不支持轉換頂級 await,但你可以使用 Rollup 的 experimentalTopLevelAwait 或 webpack@5 的 experiments.topLevelAwait 選項。

這只是意味著 babel 在編譯你的代碼時不會報錯,但它實際上并沒有實現主動將一行代碼轉換為有效 ES5 的步驟var SpotifyApiService = await createApiService();。

因此,任何執行您的代碼(瀏覽器、節點)的東西都會抱怨,因為它們不知道如何處理此功能。


查看完整回答
反對 回復 2023-05-25
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

問題是頂層 await 僅在 ES 模塊中受支持。換句話說,您要么必須添加"type": "module"到 package.json 中,要么將.js文件重命名為.mjs.



查看完整回答
反對 回復 2023-05-25
  • 3 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號