我将 AWS AppSync 与 Angular 7 应用程序一起使用,并像这样初始化客户端:
let instance: AWSAppSyncClient<NormalizedCacheObject> = new AWSAppSyncClient({
url: environment.graphqlEndpoint,
region: environment.region,
auth: {
type: AUTH_TYPE.AMAZON_COGNITO_USER_POOLS,
jwtToken: async() => { //return token }
},
cacheOptions: {
dataIdFromObject: (obj : any) => `${obj.__typename}:${obj.key}`
}
});
当 AppSync 进行查询并且 dynamodb 中已经有请求的值时,它工作正常:
{
"data": {
"getDefaultSettings": [
{
"key": "setting_a",
"value": "true"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
此查询结果被缓存,当我进行突变时,突变的响应:
{
"data": {
"addDefaultSettings": [
{
"key": "setting_a",
"value": "false"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
导致缓存通过键比较更新,这也正常工作。
但是,当 dynamodb 中还没有值时,获取返回的结果如下:
{
"data": {
"getDefaultSettings": [
null,
null
]
}
}
所以现在这个查询被缓存了,当对结果进行突变时
{
"data": {
"addDefaultSettings": [
{
"key": "setting_a",
"value": "false"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
它无法更新缓存。因此,接下来的几次执行从缓存中获取的查询,我仍然得到空结果,但是我需要在收到初始 put 突变的突变结果后立即更新缓存。
一旦下一个查询从服务器获取新数据,所有进一步的突变都会立即更新缓存,因为现在缓存中有具有相同键的条目。
所以我的问题只发生在最初的 put 上,我不知道要改变什么。
- 也许更新解析器映射
$util.toJson($ctx.result.data.$tableName)
显示查询键+空结果值?
- 初始放置后清除缓存?
我肯定想使用该network-and-cache
选项,因为它除了最初的看跌外效果很好。
如果有人可以帮助我解决这个问题,我将不胜感激。