Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vue.js Apollo-update()方法被调用两次,两次都使用乐观/虚假数据_Vue.js_Graphql_Apollo_Aws Appsync_Vue Apollo - Fatal编程技术网

Vue.js Apollo-update()方法被调用两次,两次都使用乐观/虚假数据

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“?”没有

我完全陷入了阿波罗问题中,为此我打开了一个GitHub问题,但没有得到任何回应

我用
optimisticResponse
调用阿波罗突变。据我所知,它的工作方式是调用两次
update()
:首先调用乐观数据,然后调用来自网络的实际数据

但出于某种原因,我的代码不是这样工作的。我收到两个
update()
调用,都是乐观数据

以下是一份回购协议,展示了这种行为:

  • 纱线与纱线开发
  • 在浏览器中打开,打开控制台
  • 输入一些文本并按Enter键
  • 重复上述内容
  • 注意控制台中关于重复键的错误。这是因为临时ID“?”没有被实际UUID替换 (可选)如果可用,可以打开Vue DevTools并检查数据是否不正确

  • 我在做一些挖掘,我想我找到了问题的根源。 不幸的是,我没有解决办法

    简而言之,问题可能出在aws appsync使用的名为
    OfflineLink
    的网络链路上

    解释
    aws appsync
    有一个名为
    OfflineLink
    的Apollo链接,该链接通过
    请求
    功能进行干预

    发生的事情是这样的:

  • 您可以调用
    $apollo.mutate(…)
  • ApolloClient.QueryManager
    使用乐观响应初始化第一次触发
    更新的突变。这发生在Apollo客户端数据存储中,称之为
  • graphql操作执行并到达网络链中的
    离线链接
  • 离线链接
    创建新的观察者和信息作为操作
  • OfflineLink
    的下一行调用观察员的
    next
    函数,该函数具有
    优化响应
    ,就好像它是执行结果一样
  • 这将触发您的
    更新
    第二次
    ,结果实际上是
    优化响应
  • OfflineLink
    调用观察者的
    complete
    ,以解决您的承诺
  • console.log('done!'…

  • 同时,
    OfflineLink
    阻止原始变异甚至发送请求,并生成一个新变异并使用您提供的选项发送。

    这完全是问题所在。谢谢。您能检查合并后的最新PR,看看问题是否仍然存在吗?您可以在这里找到:太好了。这主要是因为ng我在创建变异中遇到问题-我的应用程序临时显示重复数据。这是一个简单的解决方法,我可以检查数据是否已经存在,并且第一次只显示乐观响应。更新查询的服务器响应不会更新数据,但数据会立即从服务器重新请求。希望这个问题能够解决ets很快就修好了!你能看到今天合并的PR是否解决了你的问题吗:我知道这不是一个真正的“解决方案”,但它看起来像aws-appsync@deepdish
    tag有一个补丁(至少它现在似乎对我有效。我不相信这是一个稳定的分支,所以在生产中要小心,但它现在对我有效。来源: