我有一个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 仅使用以下事件序列记录一次:
没有错误,但done
和ready
都是 false 。
第二次时间我调用relay.setVariables
来加载缓存中的数据,而done
和ready
都是 true
即使数据仍然成功返回,可能导致setVariables在第一次调用时中止?
答案 0 :(得分:0)
在浏览器的调试器中,在GraphQLQueryRunner.js
的下一行设置一个断点(它应该接近结尾),以找出中止请求的内容:
readyState.update({ aborted: true }, [{ type: 'ABORT' }]);
最可能的原因是,当前查询未完成时,您还有另一个setVariables
/ forceFetch
来电。