Discord.py def check_queue发送消息

时间:2019-04-11 14:09:09

标签: python discord discord.py

不能使用await中的def check_queue。 要使用await,您需要使用defasync。 如何在不使用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 个答案:

答案 0 :(得分:1)

如果您要以异步方式进行操作,则需要这样做。

// 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

检查this JS帖子。可能对您有用。

相同的原则适用于Python。您可以使用async / await或yield from。但是,如果您在非异步函数中使用这两个函数,则会出现语法错误。

here是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