Показать сообщение отдельно
  #1 (permalink)  
Старый 22.01.2020, 15:12
Аспирант
Отправить личное сообщение для sniffysko Посмотреть профиль Найти все сообщения от sniffysko
 
Регистрация: 20.10.2009
Сообщений: 79

Инициализация асинхронног омодуля async/await
Здравствуйте. Есть необходимость написать модуль, который работает с БД MS SQL, и, как вы понимаете, инициализируется асинхронно. Кроме того, этот модуль подтягивает настройки приложения из БД. Есть нечто такое:

Модуль
// SQL может генерировать более 1 ошибки. Для их чтения смотрим err.precedingErrors
const sql = require('mssql');
const config = require('./config');

const qPreference = `SELECT [code], [value] FROM [setting] WHERE [type] != 'section' FOR JSON AUTO`

class AppSql{

	constructor(){
		this.sqlConfig = {
            ...
        };
		this._pool = null;
	}

	async init(){
		try {
			this._pool = await new sql.ConnectionPool(this.sqlConfig).connect();
			const request = this._pool.request();
			const result = await request.query(qPreference);
			let resJSON = result.recordset[0];
			if(!resJSON) resJSON = [];
			config.loadData(resJSON);
		} catch (err) {
			console.log( 'AppSql.constructor error.');
		}
	}
}

// Экспорт инстанса
module.exports = new AppSql();


Вызов модуля в приложении:
const express = require('express');
const config = require('./class/config');
const app = express();


const sql = require('./class/appsql');
await sql.init();

// Тестовый обработчик запросов
app.get('/', async (req, res, next) => {
	res.status(200).send('api run');
});

const port = process.env.PORT || config.getKey('apiPort');
app.listen(port, (err, req, res) => {
	LOG.logInfo( "Application started at port: " + port );
});


Во время запуска выдает ошибку:
await sql.init();
^^^^^
SyntaxError: await is only valid in async function
...
[nodemon] app crashed - waiting for file changes before starting...

В чем ошибка и как сделать правильно?
Ответить с цитированием