TL; DR
@router.get('/queryDAS')
async def fetch_das_db():
response = DASDBData().get_all()
logger.info("---ASYNCRONOUS----")
return (json.dumps(await response))
Начиная с комментариев, я действительно предлагаю вам сначала прочитать, как работает asyn c await. Вот то, что я считаю хорошим учебником об asyn c await.
После того, как вы прочтете руководство / объяснение, вы поймете, что response = await DASDBData().get_all()
будет ждать результата из get_all()
, прежде чем продолжить ... вести себя как традиционный синхронный код.
Теперь, если вы удалите ключевое слово await
, ваш оператор печати будет запущен до завершения метода, но вы также получить предупреждение о том, что ваша сопрограмма не ожидается. Это похоже на начало проекта, но никогда не заканчивая его. Таким образом, переменная ответа будет содержать сопрограмму, своего рода будущий результат, которого еще нет. *. Это будет ждать будущего результата и сбрасывать его в виде строки, прежде чем возвращать его.
Если вам нужно использовать результат для некоторых других вещей, вы можете import asyncio
, а затем использовать response = await asyncio.gather(response)
, чтобы получить значение ответа . Это просто дождется работающей сопрограммы и вернет результирующее значение (т.е. выполнение будет заблокировано до тех пор, пока функция что-то не вернет). Затем вы можете делать с результатом все, что захотите.
Примечание с одной стороны:
FastAPI автоматически преобразует возвращаемое значение в JSON. Если вы не используете специальное форматирование, я советую просто return await response
(ожидание может понадобиться, а может и не понадобиться, в зависимости от того, какой подход вы используете).