![](/img/trans.png)
[英]SyntaxError: await is only valid in async function in nodeJs
[英]strange await is only valid in async functions error (nodejs)
所以我得到这个奇怪的错误,我只能在异步 function 中使用等待,但我在异步函数中使用它。 奇怪的是我在编辑另一个文件之前没有收到这个错误,现在我收到了这个错误。 我在网上也没有发现可能导致此错误的原因。
我正在使用节点 v16.14.0。
这是我的代码:
"use strict";
const mariadb = require("mariadb");
class DBManager {
constructor(logger) {
if (logger === null || logger === undefined) throw "DBManager Logger referenz null oder undefined!";
this.connectionPool = mariadb.createPool({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_DATABASE,
connectionLimit: process.env.DB_MAX_CONNECTIONS,
connectTimeout: 60
});
logger.info("DBManager initialisiert!")
this.checkIntegrity();
}
async query(query, args) {
return new Promise((resolve, reject) => {
if (typeof(query) !== "string" || query == undefined) reject("ERR_INVALID_QUERY");
logger.info("Führe Datenbankabfrage: " + query + " mit parametern: " + args + " aus.");
this.connectionPool.getConnection()
.then (connection => {
connection.query(query, args)
.then(rows => {
connection.release();
delete rows["meta"];
logger.info("Datenbankabfrage erfolgreich ausgeführt.")
resolve(rows[0]);
})
.catch (error => {
logger.error(error);
reject("ERR_MARIADB_QUERY_ERROR");
});
})
.catch(error => {
logger.error(error);
reject("ERR_MARIADB_NO_CONNECTION");
});
});
}
async checkIntegrity() {
return new Promise(resolve => {
logger.info('Überprüfe ob alle Tabellen vorhanden sind.')
let tableCheck = await this.checkTables();
});
}
async checkTables() {
return new Promise((resolve, reject) => {
const query = "SELECT COUNT(*) AS tables_found_count FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = 'kaffeeportal' AND `TABLE_NAME` IN ('users', 'coffees', 'invoices');";
const result = await this.query(query, []);
if (result['tables_found_count'] == 3) resolve("TABLES_OK");
else reject("ERR_TABLES_NOT_OK");
});
}
}
module.exports = DBManager;
这是我得到的错误:
error: uncaughtException: await is only valid in async functions and the top level bodies of modules
/home/user/kaffeeportal-backend/src/dbmanager.js:53
let tableCheck = await this.checkTables();
^^^^^
SyntaxError: await is only valid in async functions and the top level bodies of modules
at Object.compileFunction (node:vm:352:18)
at wrapSafe (node:internal/modules/cjs/loader:1032:15)
at Module._compile (node:internal/modules/cjs/loader:1067:27)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/home/user/kaffeeportal-backend/src/main.js:7:19)
at Module._compile (node:internal/modules/cjs/loader:1103:14) {"date":"Thu Mar 10 2022 11:20:37 GMT+0100 (Mitteleuropäische Normalzeit)","error":{},"exception":true,"os":{"loadavg":[0.81,0.39,0.36],"uptime":134976.5},"process":{"argv":["/usr/bin/node","/home/user/kaffeeportal-backend/src/main.js"],"cwd":"/home/user/kaffeeportal-backend","execPath":"/usr/bin/node","gid":1000,"memoryUsage":{"arrayBuffers":268937,"external":1860975,"heapTotal":17653760,"heapUsed":10289536,"rss":50532352},"pid":75934,"uid":1000,"version":"v16.14.0"},"stack":"/home/user/kaffeeportal-backend/src/dbmanager.js:53\n let tableCheck = await this.checkTables();\n ^^^^^\n\nSyntaxError: await is only valid in async functions and the top level bodies of modules\n at Object.compileFunction (node:vm:352:18)\n at wrapSafe (node:internal/modules/cjs/loader:1032:15)\n at Module._compile (node:internal/modules/cjs/loader:1067:27)\n at Object.Module._extensions..js (node:internal/modules/cjs/loader:1155:10)\n at Module.load (node:internal/modules/cjs/loader:981:32)\n at Function.Module._load (node:internal/modules/cjs/loader:822:12)\n at Module.require (node:internal/modules/cjs/loader:1005:19)\n at require (node:internal/modules/cjs/helpers:102:18)\n at Object.<anonymous> (/home/user/kaffeeportal-backend/src/main.js:7:19)\n at Module._compile (node:internal/modules/cjs/loader:1103:14)","timestamp":"2022-03-10T10:20:37.568Z","trace":[{"column":18,"file":"node:vm","function":"Object.compileFunction","line":352,"method":"compileFunction","native":false},{"column":15,"file":"node:internal/modules/cjs/loader","function":"wrapSafe","line":1032,"method":null,"native":false},{"column":27,"file":"node:internal/modules/cjs/loader","function":"Module._compile","line":1067,"method":"_compile","native":false},{"column":10,"file":"node:internal/modules/cjs/loader","function":"Module._extensions..js","line":1155,"method":".js","native":false},{"column":32,"file":"node:internal/modules/cjs/loader","function":"Module.load","line":981,"method":"load","native":false},{"column":12,"file":"node:internal/modules/cjs/loader","function":"Module._load","line":822,"method":"_load","native":false},{"column":19,"file":"node:internal/modules/cjs/loader","function":"Module.require","line":1005,"method":"require","native":false},{"column":18,"file":"node:internal/modules/cjs/helpers","function":"require","line":102,"method":null,"native":false},{"column":19,"file":"/home/user/kaffeeportal-backend/src/main.js","function":null,"line":7,"method":null,"native":false},{"column":14,"file":"node:internal/modules/cjs/loader","function":"Module._compile","line":1103,"method":"_compile","native":false}]}
调用 function 时需要使用异步。使用异步 on-
return new Promise( async resolve => {
logger.info('Überprüfe ob alle Tabellen vorhanden sind.')
let tableCheck = await this.checkTables();
});
无论您在哪里使用 await,都应在 function 调用中声明异步。 希望这能解决您的问题。
您的 async 关键字不在正确的位置
像这样更新您的代码:
checkIntegrity() {
return new Promise( async function (resolve, reject) {
logger.info('Überprüfe ob alle Tabellen vorhanden sind.')
let tableCheck = await this.checkTables();
});
}
checkTables() {
return new Promise( async function (resolve, reject) {
const query = "SELECT COUNT(*) AS tables_found_count FROM `information_schema`.`tables` WHERE `TABLE_SCHEMA` = 'kaffeeportal' AND `TABLE_NAME` IN ('users', 'coffees', 'invoices');";
const result = await this.query(query, []);
if (result['tables_found_count'] == 3) resolve("TABLES_OK");
else reject("ERR_TABLES_NOT_OK");
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.