我正在使用Apollo Client(React)3.0。后端正确发送了订阅。
当我同时从后端接收2个订阅(接收和发送)时,结果“上一个”得到的值为空。
我的用例是自动回复某些关键字。例如:
已收到:帮助(子:MESSAGE_RECEIVED_SUBSCRIPTION)
已发送:“自动回复”(子:MESSAGE_SENT_SUBSCRIPTION)
在这种情况下,“ prev”设置为已接收订阅,但未设置为已发送订阅。
这是我的代码:
const { loading, error, data, subscribeToMore } = useQuery<any>(GET_CONVERSATION_QUERY, {
variables: queryVariables,
});
// handle subscription for message received and sent
const getMessageResponse = useCallback(() => {
// message received subscription
subscribeToMore({
document: MESSAGE_RECEIVED_SUBSCRIPTION,
variables: queryVariables,
updateQuery: (prev, { subscriptionData }) => {
console.log('calling message received sub');
...
},
});
// message sent subscription
subscribeToMore({
document: MESSAGE_SENT_SUBSCRIPTION,
variables: queryVariables,
updateQuery: (prev, { subscriptionData }) => {
console.log('calling message sent sub');
...
},
});
}, [subscribeToMore, queryVariables, updateConversations]);
useEffect(() => {
getMessageResponse();
// we should call useEffect only once hence []
}, []);
感谢您的帮助。
答案 0 :(得分:0)
我发现了问题所在。用于查询和预订的返回值有所不同,因此,它失败了,并且可能再次触发了查询,导致第二次运行结果为空。
希望这会有所帮助!