Возвращать объект SiriKit Intent Response только после завершения задачи - PullRequest
0 голосов
/ 03 октября 2019

Есть ли способ вернуть мой 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 секунд.

...