在第一个setVariables上中继readyState ABORT

时间:2017-07-19 20:24:28

标签: javascript reactjs graphql relay

我有一个Relay容器,它定义了以下initialVariables和片段:

  initialVariables: {
    enableExistingThreadQuery: false,
    recipientValue: null,
    contactId: null,
  },
  fragments: {
    viewer: () => Relay.QL`
      fragment on viewer {
        organization @include(if: $enableExistingThreadQuery) {
          existingThread (recipientValue: $recipientValue, contactId: $contactId) {
            id
          }
        }
      }
    `,
  }

因此,当我设置 recipientValue contactId 时,我需要运行此查询:

relay.setVariables({
  recipientValue: ...,
  contactId: ...,
  enableExistingThreadQuery: true,
}, readyState => {
  console.log(readyState);
});

第一次时间我设置这些变量,这成功运行查询,我们获取前端的数据。但是, readyState 仅使用以下事件序列记录一次:

  • NETWORK_QUERY_START
  • CACHE_RESTORE_START
  • ABORT

没有错误,但doneready都是 false

第二次时间我调用relay.setVariables来加载缓存中的数据,而doneready都是 true

即使数据仍然成功返回,可能导致setVariables在第一次调用时中止?

1 个答案:

答案 0 :(得分:0)

在浏览器的调试器中,在GraphQLQueryRunner.js的下一行设置一个断点(它应该接近结尾),以找出中止请求的内容:

readyState.update({ aborted: true }, [{ type: 'ABORT' }]);

最可能的原因是,当前查询未完成时,您还有另一个setVariables / forceFetch来电。