通过 AWS AppSync 记录更新、删除到 AWS DynamoDB 的数据有问题吗?

Posted

技术标签:

【中文标题】通过 AWS AppSync 记录更新、删除到 AWS DynamoDB 的数据有问题吗?【英文标题】:Recording Data Updated, Deleted to AWS DynamoDB via AWS AppSync has a problems? 【发布时间】:2020-08-04 01:18:41 【问题描述】:

我正在使用 AWS AppSync 通过 Swift 开发 ios 应用程序。 所以我将数据记录到 AWS DynamoDB。 我可以使用 GraphQL 操作「Create~~Mutation」「Update~~Mutation」「Delete~~Mutation」 所以我可以确认创建、更新、删除的数据。 准确地说,从 DynamoDB 控制台中删除的数据消失了,我可以检查一下。 好吧,问题是当我 Query Data updated 时,我只能 Query Data BEFORE Updated。

// schema.GraphQL
type Todo @model 
  id: ID!
  name: String!
  description: String



@IBOutlet weak var idText: UITextField!
@IBOutlet weak var nameText: UITextField!
@IBOutlet weak var desText: UITextField!

 @IBAction func Update(_ sender: Any) 

        let up = UpdateTodoInput.init(id: idText.text!, name: nameText.text!, description: desText.text)

        appSyncClient?.perform(mutation: UpdateTodoMutation(input: up))  (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
            
            print(result?.data?.updateTodo)
        

    


 @IBAction func Get(_ sender: Any) 

        let get = GetTodoQuery.init(id: idText.text!)

        appSyncClient?.fetch(query: get)   (result, error) in
            if error != nil 
                print(error?.localizedDescription ?? "")
                return
            
            print(result?.data?.getTodo)
            self.did = result?.data?.getTodo
            print(self.did)


            DispatchQueue.main.async 
                self.nameText.text! = result?.data?.getTodo?.name as! String
                self.desText.text! = result?.data?.getTodo?.description as! String
            

        


    

〜序言〜

我想更新的propaty可以通过输入值来更新「idText」「nameText」「desText」

当我运行Get(_ sender: Any) 时,我可以使用表唯一 ID 从 DynamoDB 获取数据。

并成功获取数据,「nameText」「desText」,UITextFiled.text 的属性都发生了变化。

Getting Data 的name,description 设置为nameText.text,desText.text

〜序言〜

当我对现有数据运行 Update(_ sender: Any) 时。

我可以通过 DynamoDB 控制台确认更新的数据,然后我运行 Get(_ sender: Any)

数据,即获取更新数据!但我只能得到未更新的数据!

例如,创建这个数据↓

CreateTodoInput.init(id: "123", name: "daigo", description: "ichikawa")

我要更新 Update(_ sender: Any) 创建的数据

idText.text = "123"
nameText.text = "Jack"
desText.text = "Sparo"

UpdateTodoInput.init(id: idText.text!, name: nameText.text!, description: desText.text)

然后我将通过Get(_ sender: Any)获取更新数据

idText.text = "123"

GetTodoQuery.init(id: idText.text!)

我只能得到这个

(id: "123", name: "daigo", description: "ichikawa")

但我检查了 AWS DynamoDB 控制台,表示已更新数据。 为什么会这样?

【问题讨论】:

【参考方案1】:

我明白了!

你不应该忘记这个论点!

cachePolicy: .returnCacheDataAndFetch

您可以按照此代码获取更新的数据!

appSyncClient?.fetch(query: post, cachePolicy: .returnCacheDataAndFetch)   (result, error) in
if error != nil 
print(error?.localizedDescription ?? "")
return


谢谢!

【讨论】:

以上是关于通过 AWS AppSync 记录更新、删除到 AWS DynamoDB 的数据有问题吗?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Appsync 订阅未更新我的组件

Aws Appsync 解析器:如何创建解析器以更新列表映射 (DynaMoDB) 中的项目

如何使用 AWS appsync (GraphQL) 禁用自省查询?

当设备连接到网络时,AWS AppSync 离线突变会多次更新到服务器

AWS AppSync 更新架构

AWS AppSync 初始批量放置不更新缓存