Ich bin völlig auf ein Apollo-Problem festgefahren, für das ich ein GitHub-Problem geöffnet habe und keine Reaktion darauf hatte.
Ich rufe eine Apollo-Mutation an und verwende optimisticResponse
. So wie es funktionieren soll, wie ich es verstehe, wird update()
zweimal aufgerufen: zuerst mit den optimistischen Daten, dann wieder mit den tatsächlichen Daten, die vom Netzwerk kommen.
Aber aus irgendeinem Grund funktioniert mein Code nicht so. Ich bekomme zwei update()
Aufrufe, beide mit den optimistischen Daten.
Hier ist ein Repo, der dieses Verhalten demonstriert: Ссылка
Ich habe etwas gegraben und ich glaube, ich habe die Ursache des Problems gefunden. Leider habe ich keine Lösung.
Kurz gesagt, könnte das Problem mit einer Netzwerkverbindung namens OfflineLink
auftreten, die von aws-appsync
verwendet wird.
aws-appsync
hat einen ApolloLink namens OfflineLink
, der mit der Funktion request
interveniert.
Was passiert, ist etwa so:
$apollo.mutate(...)
an
ApolloClient.QueryManager
initialisiert die Mutation, die Ihr update
zum ersten Mal mit der optimistischen Antwort auslöst. Das passiert im ApolloClient-Datenspeicher, markMutationInit ruft markMutationResult auf ruft Ihr Update OfflineLink
in der Netzwerkkette. OfflineLink
erstellt einen neuen Beobachter und sendet die Informationen zur Mutation als Aktion. OfflineLink
ruft die next
-Funktion des Beobachters mit der optimisticResponse
auf, als wäre es das Ausführungsergebnis!
update
das zweite Mal mit dem Ergebnis aus, das tatsächlich optimisticResponse
ist. OfflineLink
ruft die complete
des Beobachters auf, die Ihre Versprechen löst. console.log('done!'...
Inzwischen verhindert OfflineLink
, dass die ursprüngliche Mutation die Anfrage sogar sendet, und eine neue Mutation wird generiert und mit den Optionen gesendet, die Sie angegeben haben.
Tags und Links vue.js graphql apollo aws-appsync vue-apollo