Discord.py def check_queue发送消息

问题描述 投票:0回答:1

不能在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()
python discord discord.py
1个回答
1
投票

如果你想以你需要做的异步方式去做。

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

EG

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
© www.soinside.com 2019 - 2024. All rights reserved.