通过 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 解析器:如何创建解析器以更新列表映射 (DynaMoDB) 中的项目
如何使用 AWS appsync (GraphQL) 禁用自省查询?