不能在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()
如果你想以你需要做的异步方式去做。
// 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