aws appsync 离线:收到错误未提供变量 ID
Posted
技术标签:
【中文标题】aws appsync 离线:收到错误未提供变量 ID【英文标题】:aws appsync offline : getting error Variable id was not provided 【发布时间】:2018-11-09 20:00:51 【问题描述】:我正在使用 AWS AppSync 进行离线/在线功能的移动开发 (ios)
我正在尝试以离线模式保存数据。但我收到错误“未提供变量 id/缺少值”
当应用上线时,它会自动同步到 DynamoDB,但问题只是在离线模式下无法获取已保存的记录
这是应用程序中使用的代码
`
let userObjInput = userObjectInput(id: "id", firstName: "firstname", lastName: "lastName")
let CategoryInputs = CreateUserCategoryInput(categoryName: "categoryValue" , user: userObjInput)
let mutation = CategoryMutation(input: CategoryInputs)
appSyncClient?.perform(mutation: mutation, queue: .main, optimisticUpdate: (transaction) in
do
let selectionSets = try transaction?.read(query: query)
try transaction?.update(query: GetUserCategoriesOfUserQuery(id: "id")) (data: inout GetUserCategoriesOfUserQuery.Data) in
data.getAllCategoriesForUser?.append(GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser?.init(GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser.init(id: (UUID().uuidString), categoryName: CategoryInputs.categoryName!, isDeleted: false, user: GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser.User?.init(GetUserCategoriesOfUserQuery.Data.GetAllCategoriesForUser.User.init(id: userObjInput.id!, firstName: userObjInput.firstName!, lastName: userObjInput.lastName!)))))
catch
print(error.localizedDescription)
, conflictResolutionBlock: nil, resultHandler: (result, error) in
if error == nil
fetchCategories()
else
print(error?.localizedDescription)
)`
【问题讨论】:
你是如何初始化你的 appsync 配置的?您是否使用“id”作为缓存键?示例应用程序中提到的乐观写法:github.com/aws-samples/aws-mobile-appsync-events-starter-ios/… 是否适合您?您可以为您的用例遵循类似的模式吗? 我遵循相同的模式并使用 id 作为缓存。 aws sdk 的问题是,如果我们在 get 查询中使用参数,它将无法获取记录。我发布了问题和示例以支持 2 个月前。他们仍在调查这个问题。 您找到解决方案了吗?我想我也有同样的问题。 AWS 支持没有响应。我正在获取所有记录并应用过滤器 这个错误已经在 iOS AppSync SDK2.6.22
的新版本中修复了
【参考方案1】:
对于那些对optimistic UI missing value
有问题的人。我发现了一种技巧,可以通过使用客户端应用程序中的Custom Request Header
传递参数来临时解决问题。
之前,您的查询看起来像这样allDiaries(author: String): [Diary]
只需将其更改为 => allDiaries: [Diary]
所以您的request mapping
如下所示:
"version" : "2017-02-28",
"operation" : "Scan",
"filter" :
"expression" : "author = :author",
"expressionValues" :
":author" : "S" : "$context.request.headers.author"
参考:How to pass AWS AppSync custom request header in iOS client? 希望有用!祝你好运:)
【讨论】:
以上是关于aws appsync 离线:收到错误未提供变量 ID的主要内容,如果未能解决你的问题,请参考以下文章
迁移到纯 websocket 后,我在 AWS Appsync 上收到 GraphQL 订阅错误
为 AWS AppSync 客户端 iOS Swift 启用缓存
如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端未提供回调
新设备上的 AWS Appsync 缓存未命中和 403 错误