Discord.py def check_queue для отправки сообщения - PullRequest
0 голосов
/ 11 апреля 2019

Нельзя использовать await в def check_queue. Чтобы использовать await, вам нужно использовать def или async. Как написать await без использования async или Не могли бы вы сказать мне по-другому?

def check_queue(id):
if queues[id] != []:
    await client.send_message(message.channel, "Next Music")
    player = queues[id].pop(0)
    players[id] = player
    player.start()

1 Ответ

1 голос
/ 11 апреля 2019

Если вы хотите сделать это асинхронным способом, это то, что вам нужно сделать.

// works only inside async functions
let value = await promise;

например

async function f() {

  let promise = new Promise((resolve, reject) => {
    setTimeout(() => resolve("done!"), 1000)
  });

  let result = await promise; // wait till the promise resolves (*)

  alert(result); // "done!"
}

f();

Если вы попытаетесь использовать await в неасинхронной функции,это будет синтаксическая ошибка:

function f() {
  let promise = Promise.resolve(1);
  let result = await promise; // Syntax error
}

Источник: https://javascript.info/async-await

Проверьте этот JS пост.Может быть полезно для вас.

Те же принципы применимы к Python.Вы можете использовать async / await или yield from.Однако, если вы используете любую из не асинхронных функций, вы получите синтаксическую ошибку.

И здесь - это публикация на Python, которая даст вам хорошее понимание того, как вы должны ее реализовать..

А вот простой пример того, как это должно быть сделано:

import asyncio


async def io_related(name):
    print(f'{name} started')
    await asyncio.sleep(1)
    print(f'{name} finished')


async def main():
    await asyncio.gather(
        io_related('first'),
        io_related('second'),
    )  # 1s + 1s = over 1s


if __name__ ==  '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Выходы:

first started
second started
first finished
second finished
...