Apollo - update() method getting called twice, both times with optimistic/fake data

后端 未结 1 1827
野性不改
野性不改 2021-02-19 08:39

I\'m completely stuck on an Apollo problem, for which I\'ve opened a GitHub issue and had zero response on.

I\'m calling an Apollo mutation, using optimisticRespon

1条回答
  •  一生所求
    2021-02-19 09:10

    I was doing some digging and I think I found the source of the problem. Unfortunately, I don't have a solution.

    In short, the problem might be with a network link called OfflineLink that is used by aws-appsync.

    Explanation

    aws-appsync has an ApolloLink called OfflineLink that intervenes with the request function.

    What happens is something like this:

    1. you call $apollo.mutate(...)
    2. ApolloClient.QueryManager initializes the mutation that triggers your update the first time with the optimistic response. That is happening inside ApolloClient data store, markMutationInit calls markMutationResult that calls your update.
    3. The graphql operation executes and reaches the OfflineLink in the network chain.
    4. OfflineLink creates a new observer and dispatches the mutation info as an action.
    5. The next line of OfflineLink calls the observer's next function with the optimisticResponse as if it was the execution result!
    6. This triggers your update the second time with the result which is actually the optimisticResponse.
    7. OfflineLink calls the observer's complete which resolves your promise.
    8. console.log('done!'...

    Meanwhile, OfflineLink prevents the original mutation from even sending the request, and a new mutation is generated and sent with the options you've given it.

    0 讨论(0)
提交回复
热议问题