Vue.js Apollo-update()方法被调用两次,两次都使用乐观/虚假数据
我完全陷入了阿波罗问题中,为此我打开了一个GitHub问题,但没有得到任何回应 我用Vue.js Apollo-update()方法被调用两次,两次都使用乐观/虚假数据,vue.js,graphql,apollo,aws-appsync,vue-apollo,Vue.js,Graphql,Apollo,Aws Appsync,Vue Apollo,我完全陷入了阿波罗问题中,为此我打开了一个GitHub问题,但没有得到任何回应 我用optimisticResponse调用阿波罗突变。据我所知,它的工作方式是调用两次update():首先调用乐观数据,然后调用来自网络的实际数据 但出于某种原因,我的代码不是这样工作的。我收到两个update()调用,都是乐观数据 以下是一份回购协议,展示了这种行为: 纱线与纱线开发 在浏览器中打开,打开控制台 输入一些文本并按Enter键 重复上述内容 注意控制台中关于重复键的错误。这是因为临时ID“?”没有
optimisticResponse
调用阿波罗突变。据我所知,它的工作方式是调用两次update()
:首先调用乐观数据,然后调用来自网络的实际数据
但出于某种原因,我的代码不是这样工作的。我收到两个update()
调用,都是乐观数据
以下是一份回购协议,展示了这种行为:
我在做一些挖掘,我想我找到了问题的根源。 不幸的是,我没有解决办法 简而言之,问题可能出在aws appsync使用的名为
OfflineLink
的网络链路上
解释
aws appsync
有一个名为OfflineLink
的Apollo链接,该链接通过请求
功能进行干预
发生的事情是这样的:
$apollo.mutate(…)
ApolloClient.QueryManager
使用乐观响应初始化第一次触发更新的突变。这发生在Apollo客户端数据存储中,称之为
离线链接
离线链接
创建新的观察者和信息作为操作OfflineLink
的下一行调用观察员的next
函数,该函数具有优化响应
,就好像它是执行结果一样强>更新
第二次,结果实际上是优化响应
OfflineLink
调用观察者的complete
,以解决您的承诺console.log('done!'…
同时,
OfflineLink
阻止原始变异甚至发送请求,并生成一个新变异并使用您提供的选项发送。这完全是问题所在。谢谢。您能检查合并后的最新PR,看看问题是否仍然存在吗?您可以在这里找到:太好了。这主要是因为ng我在创建变异中遇到问题-我的应用程序临时显示重复数据。这是一个简单的解决方法,我可以检查数据是否已经存在,并且第一次只显示乐观响应。更新查询的服务器响应不会更新数据,但数据会立即从服务器重新请求。希望这个问题能够解决ets很快就修好了!你能看到今天合并的PR是否解决了你的问题吗:我知道这不是一个真正的“解决方案”,但它看起来像aws-appsync@deepdishtag有一个补丁(至少它现在似乎对我有效。我不相信这是一个稳定的分支,所以在生产中要小心,但它现在对我有效。来源: