我完全陷入了阿波罗问题,为此我打开了一个GitHub问题并且没有响应。
我正在使用optimisticResponse
调用Apollo变异。据我所知,它应该工作的方式是update()
被调用两次:首先是乐观数据,然后是实际数据来自网络。
但由于某种原因,我的代码不是这样的。我收到两个update()
次调用,两者都是乐观数据。
这是一个演示此行为的回购:https://github.com/ffxsam/apollo-update-bug
答案 0 :(得分:19)
我正在做一些挖掘,我想我找到了问题的根源。 不幸的是,我没有解决方案。
简而言之,问题可能出在OfflineLink
使用的名为aws-appsync
的网络链接上。
aws-appsync
有一个名为OfflineLink
的ApolloLink,它干预request
函数。
发生的事情是这样的:
$apollo.mutate(...)
ApolloClient.QueryManager
使用乐观响应初始化第一次触发update
的变异。这种情况发生在ApolloClient数据存储中,markMutationInit调用markMutationResult calls your update。{/ li>
OfflineLink
。OfflineLink
创建一个新的观察者,并将dispatches the mutation信息作为操作。OfflineLink
使用next
调用观察者的optimisticResponse
函数,就好像它是执行结果一样! update
第二次,其结果实际上是optimisticResponse
。OfflineLink
致电观察员complete
,以解决您的承诺。console.log('done!'...
与此同时,OfflineLink
可以防止原始变异发送请求,并生成新的变异并与您提供的选项一起发送。