await 关键字可以用来创建协程,会等待某个信号发出之后再继续执行下面的代码
例如,要暂停代码执行,直到到用户按下某个按钮后才能继续往下执行剩余代码,你就可以这样写:
func wait_confirmation():
print("Prompting user")
await $Button.button_up # Waits for the button_up signal from Button node.
print("User confirmed")
return true
此时 wait_confirmation 就会变成协程,调用方也需要对它进行 await:
func request_confirmation():
print("Will ask the user")
var confirmed = await wait_confirmation()
if confirmed:
print("User confirmed")
else:
print("User cancelled")
如果你不需要结果,直接异步调用就可以了,既不会阻止代码的正常运行,也不会让当前的函数变成协程:
func okay():
wait_confirmation()
如果对不是信号和协程的表达式使用 await,则会立即返回对应的值,函数也不会将控制权转交回调用方:
func no_wait():
var x = await get_five()
print("This doesn't make this function a coroutine.")
func get_five():
return 5