问题标签 [appsync-apollo-client]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reactjs - 如何通过 AWS AppSync 客户端将包含字符串的变量传递给 GraphQL 查询?
我正在使用 React JS 应用程序通过 AWS AppSync 客户端和 GraphQL API 将数据提交到云中的 NoSQL 表。我使用 AWS Amplify 自动生成了 GraphQL 操作,现在我尝试在我的 React 代码中提交以下操作:(注意和公司只是在 React 的状态下保存的字符串值)
这会产生一个异常“[object Object]”
现在,如果我像这样直接传递字符串
它工作正常。到目前为止,我发现的唯一解决方法是将保存字符串值的变量包装在 JSON.stringify(company) 和 JSON.stringify(note) 中。但是相应的数据库条目用双引号“Example Company”而不是Example Company 括起来。
我想避免手动修改自动生成的 GraphQL API 代码,因为我希望它会经常更改。
客户端是否有一个选项可以将实际字符串从 React 状态获取到 API 调用中,而不需要 GraphQL 将其识别为对象或在数据库中以双引号结尾?
javascript - AWS Appsync graphqlMutation helper 不更新查询
我有一个简单的 todo react 应用程序通过放大连接到 AppSync。查询和突变由 Amplify 自动生成。
使用graphqlMutation助手,我的查询应该在运行我的突变后自动更新,但它不起作用。刷新后,我确实看到突变正在更新 AppSync 后端,但我也希望它会立即更新并给出乐观的响应。
这是代码:
包含代码库的 repo 在这里:https ://github.com/jbrown/appsync-todo
我在这里做错了什么,我的查询没有更新?
amazon-web-services - 解析器中的 AWS Appsync $ctx 与 $context
我知道上下文是您在 Lambda 函数中定义的名称,但是当谈到 Appsync 解析器时,我有点困惑。我已经看到$ctx并$context在 AppSync 解析器中使用,包括在 AWS 文档中。AWS 自己的一些代码生成工具(例如 AWS Amplify CLI)会创建在同一代码中使用两者的解析器!我在解释这一点的文档中找不到任何内容。这里发生了什么?
android - AWS AppSync 错误 - 空对象引用上的 AWSMobileClientStore.get(String)
java.util.Map com.amazonaws.mobile.client.AWSMobileClientStore.get(java.lang.String[]) 在空对象引用上
我正在尝试在 AWS 表中插入数据,但出现此错误。你能帮我解决这个问题吗?
aws-appsync - 我可以使用 AppSync 预先缓存数据以在移动应用程序中离线工作吗?
我正在开发一个 Android 和 iOS 应用程序,可用于数据连接非常差或没有数据连接的区域。应用程序需要预先加载所有数据,这样即使应用程序从未与服务器通信,它也能正常工作,但它还需要能够在建立连接时进行更新和同步。是否可以在启动和查询时手动填充 AppSync (Apollo) 缓存数据库并在以后对其进行变异?该应用程序还包含几个搜索和过滤查询。我们的后端 API 目前正在使用 GraphQL。
我看过这个问题,是否可以使用 AWS AppSync 构建离线优先的移动应用程序?,但这与我要问的有点不同。
appsync-apollo-client - 在 apollo-client 中执行带有 optimiticResponse 的突变时,如何绕过“Missing field”警告?
我正在将 aws-appsync 与 apollo-client 一起使用,当我尝试在不提供所有字段的情况下执行突变时,我会收到类似“{...} 中缺少字段 x”的警告。我真的需要提供所有(包括可选)字段吗?我怎样才能优雅地处理这个?
我想知道这是否是预期的行为,或者我是否遗漏了一些明显的东西。我不想保持必须传递所有可选字段并将这些字段作为空值存储在数据库中的额外复杂性。我想因为它们只是警告,所以我会忽略它们,但我发现更新将在数据库中执行,但是 inmemorycache 缓存不会总是更新。它有时会显示更新,有时不会。
对于 GraphQL,这种突变似乎可以毫无问题地运行,并且 dynamoDB 中的结果是我所期望的:
{给定名称:'someGivenName',familyName:'someFamilyName'}
然而,缓存并不总是随着突变结果而更新,并且 apollo-client 显示警告:
“{...中缺少字段中间名”
如果我添加 middleName 字段,警告就会消失并且缓存会正确更新,但 dynamoDB 中的结果是:
{ givenName :'someGivenName', middleName : null, familyName :'someFamilyName' }
这种方法会在我的客户中导致额外的复杂性,我想避免维护。
还有其他人有这个问题吗?如何优雅地解决这个问题?
任何帮助表示赞赏。
apollo - AppSync GraphQL @connection 查询
我有一个与另一种类型的一对多连接的 graphql 类型。我想用一个过滤很多。因此 Amplify 生成了 graphql 模式,但在列表查询的输入中没有要使用的连接值。
类型:
查询:
列表查询输入
我尝试使用以下方法在变量对象中传递 id:
其中 eventUserId 是 amplify 生成并在 DynamoDB 表中使用的字段名称,但这不起作用。你如何根据这个值进行过滤?我必须手动编写吗?
亚当
编辑
我已经弄清楚了一些。我已经添加:
其中 ModelEventUserInput 是
到 ModelEventFilterInput 输入,然后我使用:
当过滤加载的应用程序不适用于订阅时,这可以过滤正确的事件。我尝试将过滤器对象添加到订阅构造函数中:
但没有任何运气。如何在订阅上实现这种过滤?
亚当
kotlin - 当设备连接到网络时,AWS AppSync 离线突变会多次更新到服务器
我在我的项目中使用 AWS AppSync Android SDK,我注意到一个问题,当我运行突变时,如果设备连接到网络,它工作正常,但如果我进行离线突变然后启用我的网络,相同的突变多次更新到服务器。所以我的数据库中有很多重复的条目。
尝试了不同的场景,但一旦建立网络连接,离线更新就会被调用两次或三次。
//AppSyncClient配置类
类客户端工厂 {
}
// 变异实现
LOGCAT 详细信息***
2019-10-25 17:57:35.180 5403-8062/com.envoyer.app D/AppSyncOfflineMutationManager:线程:[23616]:互联网断开。2019-10-25 17:57:35.196 5403-5403/com.envoyer.app I/timberLog: Info-->Plain or R&AK with attachments 2019-10-25 17:57:35.218 5403-5403/com.envoyer。 app V/PersistentOfflineMutationManager: Thread:[2]:In Constructor 2019-10-25 17:57:35.218 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager: Thread:[2]:Priming the pump - 获取所有排队的来自持久存储的突变 2019-10-25 17:57:35.218 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:从持久存储中获取所有突变请求 2019-10-25 17:57: 35.220 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:退出构造函数。持久队列 2019-10-25 17:57:35 中有 [0] 个突变。225 5403-5403/com.envoyer.app V/AppSyncComplexObjectsInterceptor:线程:[2]:实例化复杂对象拦截器 2019-10-25 17:57:35.235 5403-5403/com.envoyer.app V/AppSyncOfflineMutationInterceptor:线程:[ 2]:处理突变。2019-10-25 17:57:35.235 5403-5403/com.envoyer.app V/AppSyncOfflineMutationInterceptor: Thread:[2]: 首先检查是否是重试突变遇到了冲突。2019-10-25 17:57:35.235 5403-5403/com.envoyer.app V/AppSyncOfflineMutationInterceptor: Thread:[2]:Nope, 没有遇到冲突 2019-10-25 17:57:35.237 5403-5403/ com.envoyer.app V/AppSyncOfflineMutationManager:线程:[2]:将突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] 添加到 inMemory 队列 2019-10-25 17:57:35.237 5403-5403/com.envoyer.app V/S3ObjectManager 实现:线程:[2]:app V/PersistentOfflineMutationManager: Thread:[2]:In Constructor 2019-10-25 17:57:35.281 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager: Thread:[2]:Priming the pump - 获取所有排队的来自持久存储的突变 2019-10-25 17:57:35.281 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:从持久存储中获取所有突变请求 2019-10-25 17:57: 35.283 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:退出构造函数。持久队列中有 [1] 突变 2019-10-25 17:57:35.288 5403-5403/com.envoyer.app V/AppSyncComplexObjectsInterceptor: 线程:[2]: 实例化复杂对象拦截器 2019-10-25 17: 57:35.331 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[2]:In Constructor 2019-10-25 17:57:35.331 5403-5403/com. envoyer.app V/PersistentOfflineMutationManager:线程:[2]:启动泵 - 从持久存储中获取所有排队的突变 2019-10-25 17:57:35.331 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:从持久存储中获取所有突变请求 2019-10-25 17:57:35.333 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:退出构造函数。持久队列中有 [1] 突变 2019-10-25 17:57:35.337 5403-5403/com.envoyer.app V/AppSyncComplexObjectsInterceptor: 线程:[2]: 实例化复杂对象拦截器 2019-10-25 17: 57:35.357 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:在构造函数中 2019-10-25 17:57:35.358 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[ 2]:启动泵 - 从持久存储中获取所有排队的突变 2019-10-25 17:57:35.358 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:从持久存储中获取所有突变请求 2019 -10-25 17:57:35.360 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:退出构造函数。持久队列中有 [1] 突变 2019-10-25 17:57:35.368 5403-5403/com.envoyer.app V/AppSyncComplexObjectsInterceptor: 线程:[2]: 实例化复杂对象拦截器 2019-10-25 17: 57:35.415 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:在构造函数中 2019-10-25 17:57:35.415 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[ 2]:启动泵 - 从持久存储中获取所有排队的突变 2019-10-25 17:57:35。415 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:从持久存储中获取所有突变请求 2019-10-25 17:57:35.417 5403-5403/com.envoyer.app V/PersistentOfflineMutationManager:线程:[2]:退出构造函数。持久队列中有 [1] 突变 2019-10-25 17:57:35.422 5403-5403/com.envoyer.app V/AppSyncComplexObjectsInterceptor: 线程:[2]: 实例化复杂对象拦截器 2019-10-25 17: 57:35.470 5403-8067/com.envoyer.app D/AppSyncOfflineMutationManager:线程:[23621]:互联网断开。2019-10-25 17:57:35.472 5403-8069/com.envoyer.app D/AppSyncOfflineMutationManager:线程:[23623]:互联网断开。2019-10-25 17:57:35.472 5403-8071/com.envoyer.app D/AppSyncOfflineMutationManager:线程:[23625]:互联网断开。2019-10-25 17:57:35.473 5403-8077/com.envoyer。应用程序 D/AppSyncOfflineMutationManager:线程:[23628]:Internet 已断开连接。2019-10-25 17:57:35.474 5403-8080/com.envoyer.app D/AppSyncOfflineMutationManager:线程:[23630]:互联网断开。2019-10-25 17:57:36.103 5403-8054/com.envoyer.app E/timberLog: onError-->websocket 抛出异常 2019-10-25 17:57:37.759 5403-7658/com. envoyer.app V/AppSyncOfflineMutationInterceptor:线程:[23596]:处理突变
******启用网络后*******
<-- 200 https://4betrpovsffuhjxad5ouxlm6um.appsync-api.eu-west-1.amazonaws.com/graphql(1824ms) 2019-10-25 17:58:31.140 5403-8282/com.envoyer.app D/OkHttp: content-type: application/json;charset=UTF-8 2019-10-25 17:58:31.140 5403 -8282/com.envoyer.app D/OkHttp: content-length: 100 2019-10-25 17:58:31.140 5403-8282/com.envoyer.app D/OkHttp: 日期: Fri, 25 Oct 2019 12:29 :19 GMT 2019-10-25 17:58:31.140 5403-8282/com.envoyer.app D/OkHttp: x-amzn-requestid: e351113d-b8b4-416c-855c-6c28c95f1a98 2019-10-25 17:58: 31.140 5403-8282/com.envoyer.app D/OkHttp: x-cache: Miss from cloudfront 2019-10-25 17:58:31.140 5403-8282/com.envoyer.app D/OkHttp: via: 1.1 bae54c9df29d44a26d5e0fd3d2c61c9c.cloudfront .net (CloudFront) 2019-10-25 17:58:31.140 5403-8282/com.envoyer.app D/OkHttp: x-amz-cf-pop: MAA50-C1 2019-10-25 17:58:31.141 5403 -8282/com.envoyer.app D/OkHttp:x-amz-cf-id:Pl8OYaRmtJxPinPXFbGwcnfgQxyGlWJo1LE0n9_oQprRKeULGsvkCw== 2019-10-25 17:58:31。141 5403-8282/com.envoyer.app D/OkHttp: {"data":{"MessageActivity":{"__typename":"Response","status":true,"data":"[]","message ":"成功"}}} 2019-10-25 17:58:31.141 5403-8282/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019-10-25 17:58 :31.142 5403-8282/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.142 5403-8282/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[23645]:移除突变 [7ce851b7- fb8e-4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.209 5403-8054/com.envoyer.app I/DpmTcmClient:RegisterTcmMonitor 来自:com.android.okhttp.TcmIdleTimerMonitor 2019-10-25 17 :58:31.271 5403-8298/com.envoyer.app I/RetryInterceptor: 返回网络响应:成功 2019-10-25 17:58:31.271 5403-8298/com.envoyer.app D/OkHttp:<-- 200https://4betrpovsffuhjxad5ouxlm6um.appsync-api.eu-west-1.amazonaws.com/graphql(1900ms) 2019-10-25 17:58:31.271 5403-8298/com.envoyer.app D/OkHttp: content-type: application/json;charset=UTF-8 2019-10-25 17:58:31.272 5403 -8298/com.envoyer.app D/OkHttp: content-length: 100 2019-10-25 17:58:31.272 5403-8298/com.envoyer.app D/OkHttp: 日期: Fri, 25 Oct 2019 12:29 :19 GMT 2019-10-25 17:58:31.272 5403-8298/com.envoyer.app D/OkHttp: x-amzn-requestid: d0289bd6-3e31-49a6-815f-a708a1fa2233 2019-10-25 17:58: 31.272 5403-8298/com.envoyer.app D/OkHttp: x-cache: Miss from cloudfront 2019-10-25 17:58:31.272 5403-8298/com.envoyer.app D/OkHttp: via: 1.1 bae54c9df29d44a26d5e0fd3d2c61c9c.cloudfront .net (CloudFront) 2019-10-25 17:58:31.272 5403-8298/com.envoyer.app D/OkHttp: x-amz-cf-pop: MAA50-C1 2019-10-25 17:58:31.272 5403 -8298/com.envoyer.app D/OkHttp: x-amz-cf-id: 7wqu5JSmQJFT9layGkgpXB1WNpx5qD0-ohHF6TNHbU2l8gcBBUs0AQ== 2019-10-25 17:58:31。274 5403-8298/com.envoyer.app D/OkHttp: {"data":{"MessageActivity":{"__typename":"Response","status":true,"data":"[]","message ":"成功"}}} 2019-10-25 17:58:31.274 5403-8298/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019-10-25 17:58 :31.276 5403-8298/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.276 5403-8298/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[23648]:移除突变 [7ce851b7- fb8e-4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.407 5403-8307/com.envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.408 5403 -8307/com.envoyer.app D/OkHttp: <-- 200响应","status":true,"data":"[]","message":"Success"}}} 2019-10-25 17:58:31.274 5403-8298/com.envoyer.app D/OkHttp : <-- END HTTP (100 字节正文) 2019-10-25 17:58:31.276 5403-8298/com.envoyer.app V/dd: ff 2019-10-25 17:58:31.276 5403-8298/ com.envoyer.app V/PersistentOfflineMutationManager:线程:[23648]:从持久存储 2019-10-25 17:58:31.407 5403-8307/com.envoyer.app 中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.408 5403-8307/com.envoyer.app D/OkHttp: <-- 200响应","status":true,"data":"[]","message":"Success"}}} 2019-10-25 17:58:31.274 5403-8298/com.envoyer.app D/OkHttp : <-- END HTTP (100 字节正文) 2019-10-25 17:58:31.276 5403-8298/com.envoyer.app V/dd: ff 2019-10-25 17:58:31.276 5403-8298/ com.envoyer.app V/PersistentOfflineMutationManager:线程:[23648]:从持久存储 2019-10-25 17:58:31.407 5403-8307/com.envoyer.app 中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.408 5403-8307/com.envoyer.app D/OkHttp: <-- 200276 5403-8298/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.276 5403-8298/com.envoyer.app V/PersistentOfflineMutationManager:线程:[23648]:删除突变 [7ce851b7-fb8e -4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.407 5403-8307/com.envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.408 5403- 8307/com.envoyer.app D/OkHttp: <-- 200276 5403-8298/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.276 5403-8298/com.envoyer.app V/PersistentOfflineMutationManager:线程:[23648]:删除突变 [7ce851b7-fb8e -4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.407 5403-8307/com.envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.408 5403- 8307/com.envoyer.app D/OkHttp: <-- 200https://4betrpovsffuhjxad5ouxlm6um.appsync-api.eu-west-1.amazonaws.com/graphql(2007ms) 2019-10-25 17:58:31.408 5403-8307/com.envoyer.app D/OkHttp: content-type: application/json;charset=UTF-8 2019-10-25 17:58:31.408 5403 -8307/com.envoyer.app D/OkHttp: content-length: 100 2019-10-25 17:58:31.408 5403-8307/com.envoyer.app D/OkHttp: 日期: Fri, 25 Oct 2019 12:29 :19 GMT 2019-10-25 17:58:31.408 5403-8307/com.envoyer.app D/OkHttp: x-amzn-requestid: 6a575625-f4fa-4209-ac5c-e47f88297910 2019-10-25 17:58: 31.408 5403-8307/com.envoyer.app D/OkHttp: x-cache: Miss from cloudfront 2019-10-25 17:58:31.409 5403-8307/com.envoyer.app D/OkHttp: via: 1.1 bae54c9df29d44a26d5e0fd3d2c61c9c.cloudfront .net (CloudFront) 2019-10-25 17:58:31.409 5403-8307/com.envoyer.app D/OkHttp: x-amz-cf-pop: MAA50-C1 2019-10-25 17:58:31.409 5403 -8307/com.envoyer.app D/OkHttp: x-amz-cf-id: 1RaLA8-nyDTGsreE4QmtMETeslLvw3PmnHHdMZqzTXsYSjg3Y3kVbQ== 2019-10-25 17:58:31。411 5403-8307/com.envoyer.app D/OkHttp: {"data":{"MessageActivity":{"__typename":"Response","status":true,"data":"[]","message ":"成功"}}} 2019-10-25 17:58:31.411 5403-8307/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019-10-25 17:58 :31.469 5403-8281/com.envoyer.app I/RetryInterceptor: 返回网络响应: 成功 2019-10-25 17:58:31.469 5403-8281/com.envoyer.app D/OkHttp: <-- 200envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.469 5403-8281/com.envoyer.app D/OkHttp: <-- 200envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.469 5403-8281/com.envoyer.app D/OkHttp: <-- 200https://4betrpovsffuhjxad5ouxlm6um.appsync-api.eu-west-1.amazonaws.com/graphql(2152ms) 2019-10-25 17:58:31.469 5403-8281/com.envoyer.app D/OkHttp: content-type: application/json;charset=UTF-8 2019-10-25 17:58:31.470 5403 -8281/com.envoyer.app D/OkHttp: content-length: 100 2019-10-25 17:58:31.470 5403-8281/com.envoyer.app D/OkHttp: 日期: Fri, 25 Oct 2019 12:29 :19 GMT 2019-10-25 17:58:31.470 5403-8281/com.envoyer.app D/OkHttp: x-amzn-requestid: 509dabd-008d-477b-8e0d-247c2db21ced 2019-10-25 17:58: 31.470 5403-8281/com.envoyer.app D/OkHttp: x-cache: Miss from cloudfront 2019-10-25 17:58:31.470 5403-8281/com.envoyer.app D/OkHttp: via: 1.1 bae54c9df29d44a26d5e0fd3d2c61c9c.cloudfront .net (CloudFront) 2019-10-25 17:58:31.470 5403-8281/com.envoyer.app D/OkHttp: x-amz-cf-pop: MAA50-C1 2019-10-25 17:58:31.470 5403 -8281/com.envoyer.app D/OkHttp:x-amz-cf-id:-rdF8loaCHAAmZN8-mRIp9EIYOPJ5ngimAwyisRkoLwXnU_VdrmNAw== 2019-10-25 17:58:31。471 5403-8281/com.envoyer.app D/OkHttp: {"data":{"MessageActivity":{"__typename":"Response","status":true,"data":"[]","message ":"成功"}}} 2019-10-25 17:58:31.471 5403-8281/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019-10-25 17:58 :31.473 5403-8281/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.473 5403-8281/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[23644]:移除突变 [7ce851b7- fb8e-4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.508 5403-8283/com.envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.509 5403 -8283/com.envoyer.app D/OkHttp: <-- 200响应","status":true,"data":"[]","message":"Success"}}} 2019-10-25 17:58:31.471 5403-8281/com.envoyer.app D/OkHttp : <-- END HTTP (100 字节正文) 2019-10-25 17:58:31.473 5403-8281/com.envoyer.app V/dd: ff 2019-10-25 17:58:31.473 5403-8281/ com.envoyer.app V/PersistentOfflineMutationManager:线程:[23644]:从持久存储 2019-10-25 17:58:31.508 5403-8283/com.envoyer.app 中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp: <-- 200响应","status":true,"data":"[]","message":"Success"}}} 2019-10-25 17:58:31.471 5403-8281/com.envoyer.app D/OkHttp : <-- END HTTP (100 字节正文) 2019-10-25 17:58:31.473 5403-8281/com.envoyer.app V/dd: ff 2019-10-25 17:58:31.473 5403-8281/ com.envoyer.app V/PersistentOfflineMutationManager:线程:[23644]:从持久存储 2019-10-25 17:58:31.508 5403-8283/com.envoyer.app 中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp: <-- 200473 5403-8281/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.473 5403-8281/com.envoyer.app V/PersistentOfflineMutationManager:线程:[23644]:删除突变 [7ce851b7-fb8e -4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.508 5403-8283/com.envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.509 5403- 8283/com.envoyer.app D/OkHttp: <-- 200473 5403-8281/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.473 5403-8281/com.envoyer.app V/PersistentOfflineMutationManager:线程:[23644]:删除突变 [7ce851b7-fb8e -4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.508 5403-8283/com.envoyer.app I/RetryInterceptor:返回网络响应:成功 2019-10-25 17:58:31.509 5403- 8283/com.envoyer.app D/OkHttp: <-- 200https://4betrpovsffuhjxad5ouxlm6um.appsync-api.eu-west-1.amazonaws.com/graphql(2182ms) 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp: content-type: application/json;charset=UTF-8 2019-10-25 17:58:31.509 5403 -8283/com.envoyer.app D/OkHttp: content-length: 100 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp: 日期: Fri, 25 Oct 2019 12:29 :19 GMT 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp: x-amzn-requestid: be28bb94-2788-449d-bc6f-af722e77e6d0 2019-10-25 17:58: 31.509 5403-8283/com.envoyer.app D/OkHttp:x-cache:来自云端的小姐 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp:通过:1.1 bae54c9df29d44a26d5e0fd3d2c61c9c.cloudfront .net (CloudFront) 2019-10-25 17:58:31.509 5403-8283/com.envoyer.app D/OkHttp: x-amz-cf-pop: MAA50-C1 2019-10-25 17:58:31.509 5403 -8283/com.envoyer.app D/OkHttp: x-amz-cf-id: edvrZI0GEB_1DDoikzUVcFjpwwyIGAXl9elEqbgk-_ShvoKsP86kuw== 2019-10-25 17:58:31。510 5403-8283/com.envoyer.app D/OkHttp: {"data":{"MessageActivity":{"__typename":"Response","status":true,"data":"[]","message ":"成功"}}} 2019-10-25 17:58:31.511 5403-8283/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019-10-25 17:58 :31.512 5403-8283/com.envoyer.app V/dd:ff 2019-10-25 17:58:31.512 5403-8283/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[23647]:移除突变 [7ce851b7- fb8e-4ec2-ac49-4b603ca13acd] 来自持久存储 2019-10-25 17:58:31.685 5403-8282/com.envoyer.app V/QueueUpdateHandler:线程:[23645]:将 mutationInProgress 设置为 false。"[]","message":"Success"}}} 2019-10-25 17:58:31.511 5403-8283/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019 -10-25 17:58:31.512 5403-8283/com.envoyer.app V/dd: ff 2019-10-25 17:58:31.512 5403-8283/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[23647 ]:从持久存储中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] 2019-10-25 17:58:31.685 5403-8282/com.envoyer.app V/QueueUpdateHandler: Thread:[23645]: 将 mutationInProgress 设置为错误的。"[]","message":"Success"}}} 2019-10-25 17:58:31.511 5403-8283/com.envoyer.app D/OkHttp: <-- END HTTP (100-byte body) 2019 -10-25 17:58:31.512 5403-8283/com.envoyer.app V/dd: ff 2019-10-25 17:58:31.512 5403-8283/com.envoyer.app V/PersistentOfflineMutationManager: 线程:[23647 ]:从持久存储中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd] 2019-10-25 17:58:31.685 5403-8282/com.envoyer.app V/QueueUpdateHandler: Thread:[23645]: 将 mutationInProgress 设置为错误的。从持久存储 2019-10-25 17:58:31.685 5403-8282/com.envoyer.app V/QueueUpdateHandler: Thread:[23645] 中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd]:将 mutationInProgress 设置为 false。从持久存储 2019-10-25 17:58:31.685 5403-8282/com.envoyer.app V/QueueUpdateHandler: Thread:[23645] 中删除突变 [7ce851b7-fb8e-4ec2-ac49-4b603ca13acd]:将 mutationInProgress 设置为 false。
graphql - Apollo 缓存正在重置为旧数据
我正在使用 AWS AppSync 和 Apollo 构建 Expo 移动应用程序,我遇到了一个间歇性但非常严重的问题,即缓存损坏,或者至少没有正确更新。不幸的是,因为我正在使用 AppSync 并且我想要离线功能,所以我无法升级到最新的 Apollo 客户端,因此数据存储在 Redux 中,有 4 个顶级键:offline、rehydrated和。appsyncappsync-metadata
这是我期望发生的事情:
- “项目”的 GraphQL 查询返回正确的数据
- 该数据被写入缓存。特别是,我希望
appsync.ROOT_QUERY项目中会有一个条目,比如加上项目的所有属性getProject({"input":{"id":"project-7"}})的顶级条目。appsync - 当我执行突变时,我希望项目条目能够更新。
- 由于项目已更新,我希望 UI 会刷新以反映更新的数据。
大多数情况下,这完全像上面那样发生。但是,有时缓存会发生问题。我不确定到底是什么,但它进入了一个奇怪的状态,我无法修复它。
以下是症状:
- 当我启动应用程序时,缓存被初始化为“旧”状态,不包括对 project-7 的查询,即使我在终止应用程序之前刚刚查询过它。
- 当我搜索 project-7 时,它将
getProject...project-7查询添加到缓存和 project-7 的条目,但由于某种原因似乎没有所有字段。 - 当我进行突变时,
AAS_WRITE_CACHE实际上会从查询缓存中删除条目!getProject...project-7虽然突变成功了,但我可以看到 AppSync 服务器中的数据已更新,并且客户端不会在任何地方记录任何错误。 - UI 不会更新。
我尝试向update突变添加一个,以便我可以自己更新缓存,但是当我执行const data = proxy.readQuery({ query: ProjectQuery } ... )(指定project-7)时,它会抛出一个异常,说它找不到该查询,所以我无法更新项目。如果我手动重新获取项目,那么一切都会再次运行,直到下一次突变。
真正困难的是,一旦我的应用程序处于这种状态,我就无法弄清楚如何修复它。我试过client.resetStore()了,但它只是被补水了。我试过打电话AsyncStorage.clear(),然后停止应用程序并重新启动它,但这也不起作用。怎么会这样?它在哪里存储数据?
再次值得一提的是,在我测试过的大多数设备(Android 和 iOS)上,它可以运行几天而没有任何问题,但特别是在一台 Android 设备上,它每隔一两天就会发生一次。两次我已经能够使用 React Native 调试器中的“清除异步存储”来修复它,但现在即使这样似乎也无法修复它。
所以,这是我的问题:
- 谁能建议可能导致缓存进入这种奇怪状态的原因?或者我如何尝试找出问题所在。
- 它在哪里存储然后放回的数据?里面有缓存的快照,
appsync-metadata但是当我清除所有 AsyncStorage 时,它们肯定也应该被删除吗?
我真的卡住了!!
PS这是我正在使用的相关(我认为)包:
android - 当设备从离线状态进入在线状态时,AWS Appsync 订阅未触发(设备离线时触发的事件)
- 订阅监听器在android中注册
- 使设备离线
- 从 AWS 控制台触发突变
- 使设备联机
我期待订阅块被调用,因为有一个突变(我在设备在线时获得订阅)
有什么方法可以获取设备离线时触发的订阅?