Показать сообщение отдельно
  #2 (permalink)  
Старый 31.05.2018, 22:04
Аватар для EmperioAf
Профессор
Отправить личное сообщение для EmperioAf Посмотреть профиль Найти все сообщения от EmperioAf
 
Регистрация: 15.01.2015
Сообщений: 622

Да, есть.
Переходить на полностью 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?

Последний раз редактировалось EmperioAf, 31.05.2018 в 23:53.
Ответить с цитированием