Я использую 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"
}
]
}
}
приводит к обновлению кэша с помощью сравнения ключей, которое также работает правильно.
Однако, когда в динамодате еще нет значений, выборка возвращает результат, подобный:
{
"data": {
"getDefaultSettings": [
null,
null
]
}
}
Так что теперь этот запрос кэшируется и при проведении мутации с результатом
{
"data": {
"addDefaultSettings": [
{
"key": "setting_a",
"value": "false"
},
{
"key": "setting_b",
"value": "false"
}
]
}
}
невозможно обновить кеш. Таким образом, следующие несколько раз при выполнении запроса он берется из кеша, и я все равно получаю нулевой результат, но мне нужно немедленно обновить кеш после получения результата мутации для первоначальной пут-мутации.
Как только следующий запрос извлекает новые данные с сервера, все дальнейшие мутации немедленно обновляют кэш, потому что теперь в нем есть записи с тем же ключом.
Так что моя проблема возникает только на начальном пути, и я не знаю, что изменить.
- Возможно обновить сопоставление резольвера с
$util.toJson($ctx.result.data.$tableName)
чтобы открыть запрашиваемый ключ + нулевое значение результата?
- Очистить кеш после первоначальной установки?
Я бы определенно хотел использовать опцию network-and-cache
, поскольку она отлично работает, за исключением начального пута.
Буду признателен, если кто-нибудь поможет мне с этим.