@Banjamin
Изучаю веб разработку

Как написать асинхронную функцию?

Добрый день. Ниже код который отправляет запись из БД через get. Вынес функцию за пределы роута, но тут встал вопрос, res.send(data) не будет ждать выполнения getUsers, что логично. Подскажите самый оптимальный вариант выполнения действий: получить data, отправить ответ, без создания async функции внутри роута, где будет два await-а. Хотел упростить запись, и использовать эту функцию многократно.

async function getUsers(){
    const db = await pool.connect()
    const data = await db.query('SELECT * FROM users')
    console.log(data.rows)
    
    return data.rows  
}

app.get('/getUsers', (req,res)=>{

   const data = getUsers()
   res.send(data)   
})
  • Вопрос задан
  • 79 просмотров
Решения вопроса 1
l3ftoverz
@l3ftoverz Куратор тега JavaScript
Rings of Saturn - The Husk
Используй
.then()
.catch()

Или делай функцию, где вызываешь getUsers так же асинхронной и жди getUsers.

т.е.:

async function getUsers () {
    const db = await pool.connect()
    const data = await db.query('SELECT * FROM users')
    
    return data.rows  
}

app.get('/getUsers', (req, res) => {
  getUsers
      .then(data => res.send(data))
      .catch(error => '...')  
})


or

async function getUsers () {
    const db = await pool.connect()
    const data = await db.query('SELECT * FROM users')
    
    return data.rows  
}

app.get('/getUsers', async (req, res) => {
  const data = await getUsers();
  res.send(data);
})
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Banjamin Автор вопроса
Изучаю веб разработку
Придумал такой вариант:
async function getUsers(cb){
    const db = await pool.connect()
    const data = await db.query('SELECT * FROM users')
    console.log(data.rows)
    await cb.send(data.rows)
   
}


app.get('/getUsers', (req,res)=>{

   getUsers(res)
     
})
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы