Есть ли способ вернуть мой Intent Response асинхронно? Когда я выполняю свои намерения, я делаю сетевой запрос и хочу дождаться завершения потока ярлыков, пока этот запрос не будет успешно выполнен.
В настоящее время у меня есть:
func handle(intent: AppleScriptIntent, completion: @escaping (AppleScriptIntentResponse) -> Void) {
let response = AppleScriptIntentResponse(code: .success, userActivity: nil)
let data = intent.apple_script?.data(using: .utf8)
let networkHandler = NetworkHandler()
networkHandler.browseForService()
let connection = networkHandler.connection
connection.send(content: data, completion: .idempotent)
completion(response)
}
Но яхотелось бы иметь:
func handle(intent: AppleScriptIntent, completion: @escaping (AppleScriptIntentResponse) -> Void) {
let successResponse = AppleScriptIntentResponse(code: .success, userActivity: nil)
let inProgressResponse = AppleScriptIntentResponse(code: .inProgress, userActivity: nil)
let data = intent.apple_script?.data(using: .utf8)
let networkHandler = NetworkHandler()
networkHandler.browseForService()
let connection = networkHandler.connection
connection.send(content: data, completion: .idempotent)
if requestSent {
completion(successResponse)
} else {
completion(inProgressResponse)
}
}
Этот последний фрагмент кода запускается и сразу же завершает Ярлык, даже если сетевое соединение и запрос завершаются за 5 секунд.