不能使用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()
答案 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