пытаюсь понять что сделать, чтобы запросы к бд были неблокирующиеся.
В общем случае я использую всегда одну конструкцию для получения результата запроса - $hashref_array = $c->mysql->db->query(@_)->hashes || [];
В примерах я вижу минимум три варианта:
->query(... => sub {...} )
->query_p() + Mojo::Promise->all->then->wait
await ->query_p()->result->hashes
и вот дальше я не понимаю.
в первом варианте - всё ли у меня будет ок, если я буду присваивать внутри sub что-то внешним переменным? Т.е. my $ha; $c->query( ... => sub {... $ha = $results->hashes})
во втором варианте - тот же вопрос
await - кажется очевидно подходит и меньше всего текущий код менять, но работает ли async/await на старых ядрах (2.6.32) и старых перлах (5.18) ?
Лично я бы не стал зависеть от await, да он и не нужен. Первый вариант: да, можно, но тебе всё равно нужно будет сигнализировать как-то, что переменная заполнилась. Так что: лучше сразу используй промисы
Upd: емнип await в можо ядро завезли всего пару лет назад, поэтому требований к версии перла я не помню. Линупс не важно какой, это всё равно иолуп спрячет
Авейт же просто удобный интерфейс к прописки, не?
Обсуждают сегодня