Метод Apollo-update () вызывается дважды, оба раза с оптимистическими / поддельными данными

я полностью застрял на проблеме Apollo, для которой я открыл проблему GitHub и имел нулевой ответ.

Я вызываю мутацию Аполлона, используя optimisticResponse. То, как это должно работать, как я понимаю, это update() вызывается дважды: сначала с оптимистическими данными, затем снова с фактическими данными, поступающими из сети.

но по какой-то причине мой код не работает как этот. Я получаю два update() звонки, оба с оптимистичным данные.

вот РЕПО, которое демонстрирует это поведение:https://github.com/ffxsam/apollo-update-bug

  1. пряжа & & пряжа dev
  2. открыть в браузере, откройте консоль
  3. Введите текст и нажмите Enter
  4. повторите выше
  5. обратите внимание на ошибку в консоли о дубликатах ключей. Это происходит из-за временного ID "??"не заменяется настоящим UUID (необязательно) вы можете открыть вю DevTools, если доступно, и проверьте данные, чтобы увидеть, что это неправильно

1 ответов


я копал, и я думаю, что нашел источник проблемы. К сожалению, у меня нет решения.

короче, проблема может быть с сетевой ссылкой под названием OfflineLink используется aws-appsync.

объяснение

aws-appsync имеет Аполлолинк под названием OfflineLink Это вмешивается в С optimisticResponse как будто это был результат исполнения!

  • это вызывает ваш update на второй раз С результатом, который на самом деле optimisticResponse.
  • OfflineLink вызывает наблюдателя complete что разрешает ваше обещание.
  • console.log('done!'...
  • между тем, OfflineLink предотвращает оригинал мутация от даже отправки запроса, и новая мутация генерируется и отправляется с параметрами, которые вы ему дали.