Зачем мне использовать CachePolicy returnCacheDataAndFetch для запросов AWS AppSync? - PullRequest
0 голосов
/ 13 июня 2019

Я начал использовать инструментарий AWS Amplify на iOS, прототип SwiftUI.В руководстве есть это для runQuery:

func runQuery(){
    appSyncClient?.fetch(query: ListTodosQuery(), cachePolicy: .returnCacheDataAndFetch) {(result, error) in
        if error != nil {
            print(error?.localizedDescription ?? "")
            return
        }
        result?.data?.listTodos?.items!.forEach { print(($0?.name)! + " " + ($0?.description)!) }
    }
}

Когда я вызываю его, я получаю дубликаты в выводе - кэшируется и выбирается.

Какова цель политики returnCacheDataAndFetch?Как эта политика используется на практике?

ПРИМЕЧАНИЕ. У меня есть несколько изменений, не использующих Todos, а просто общий MyType из генератора aws cli.


func runMutation(){
    let mutationInput = CreateMyTypeInput(title: "Use AppSync", content:"Realtime and Offline")
    appSyncClient?.perform(mutation: CreateMyTypeMutation(input: mutationInput)) { (result, error) in
        if let error = error as? AWSAppSyncClientError {
            print("Error occurred: \(error.localizedDescription )")
        }
        if let resultError = result?.errors {
            print("Error saving the item on server: \(resultError)")
            return
        }
    }
}

func runQuery(){
    appSyncClient?.fetch(query: ListMyTypesQuery(), cachePolicy: .returnCacheDataAndFetch) {(result, error) in
        if error != nil {
            print(error?.localizedDescription ?? "")
            return
        }
        result?.data?.listMyTypes?.items!.forEach { print(($0?.id)! + " " + ($0?.title)! + " " + ($0?.content)!) }
    }
}

1 Ответ

0 голосов
/ 01 июля 2019

returnCacheDataAndFetch используется в случае, если вам нужно улучшить время отклика пользовательского интерфейса и опыт приложения, предоставляя данные из кэша, где задержка сети недопустима, однако устаревшие данные приемлемы.

...