Показать сообщение отдельно
  #3 (permalink)  
Старый 02.06.2018, 15:00
Новичок на форуме
Отправить личное сообщение для ками Посмотреть профиль Найти все сообщения от ками
 
Регистрация: 26.05.2018
Сообщений: 8

Сообщение от EmperioAf Посмотреть сообщение
Да, есть.
Переходить на полностью async/await стэк, так, чтобы все функции которые что-то делают асинхронно, стали возвращать промисы, а не принимать callback для продолжения работы, например встроенный util.promisify умеет оборачивать классические error-first callback функции в функцию которая возвращает Promise.

Ну и любую асинхронную функцию можно завернуть в функцию которая вернет промис, в качестве примера:

const delay = (timeout) => new Promise(resolve => setTimeout(resolve, timeout));


Теперь в вашей асинхронной функции можно написать:

async function test() {
    const db = new PGPool(config);
    const data = await db.query(sql);
    const { rows } = data;
    console.log('data have received');
    for(const row of rows) {
        await delay(1e3);
        console.log(row);
    }
}
test().catch(console.error);


Те же самые ошибки ловятся в таком случае через try/catch. Единственное, что важно это всегда помнить какая функция вызывается, синхронная или асинхронная, чтобы не получить в итоге Unhandled promise rejection в production.

Опишите пожалуйста ситуацию, когда вы не можете использовать async/await?
Вот в этом случае:
async function() {
let lineReader = require('readline').createInterface({
		  input: require('fs').createReadStream(path.join(__dirname, '../files/log.log'))
		});
		let r = await lineReader.on('line');
console.log(r);
}

Не хочет строку выдавать. Вообще ищу рабочую библиотеку которая строки сможет читать из файла
Ответить с цитированием