0
私のコンポーネントはサブスクリプションクエリを呼び出していますが、なんらかの理由でサブスクリプションリゾルバにアクセスしていません。ブレークポイントはアクティブ化されません。しかし、クライアントでは、GraphQLサブスクリプションエラーが発生します:Apolloサブスクリプションリゾルバーは決してアクティブにならない?
"Subscription must return Async Iterable. Received: undefined"
何が原因である可能性がありますか?
事前にすべての情報に感謝します。
購読QUERY
const IM_SUBSCRIPTION_QUERY = gql`
subscription getIMsViaSubscription($fromID: String!, $toID: String!){
IMAdded(fromID:$fromID, toID: $toID){
id,
fromID,
toID,
msgText,
myUserData{
id,
name_first,
name_last,
picture_large,
picture_medium,
picture_thumbnail
my_category
}
}
}
`;
RESOLVER
Subscription: {
IMAdded(IMThatWasAdded) {
debugger; <== IS NEVER ACTIVATED
subscribe: withFilter(() => SubscriptionServer.pubsub.asyncIterator(IM_ADDED_CHANNEL), (newIM, args) => {
const callIsFromMsgFoldersComponent = args.toID == 0;
var result;
if (callIsFromMsgFoldersComponent){
result = (newIM.fromID === args.fromID || newIM.toID === args.fromID);
} else {
result = ((newIM.fromID === args.fromID && newIM.toID === args.toID) || (newIM.fromID === args.toID && newIM.toID === args.fromID));
}
return result;
})
COMPONENT
const withDataAndSubscription = graphql(GETIMS_QUERY, {
options({toID}) {
console.log(GETIMS_QUERY);
const fromID = Meteor.userId();
return {
fetchPolicy: 'cache-and-network',
variables: {fromID: `${fromID}`, toID: `${toID}`}
};
}
,
props: props => {
debugger;
return {
loading: props.data.loading,
instant_message: props.data.instant_message,
subscribeToMore: props.data.subscribeToMore,
subscribeToNewIMs: params => {
debugger; <==IS ACTIVATED AS EXPECTED
console.log(IM_SUBSCRIPTION_QUERY); <==IS OKAY
const fromID = Meteor.userId();
const toID = params.toID;
return props.data.subscribeToMore({
document: IM_SUBSCRIPTION_QUERY,
variables: {fromID: `${fromID}`, toID: `${toID}`},
updateQuery: (previousResult, {subscriptionData}) => {
if (!subscriptionData.data) {
return previousResult;
}
const newMsg = subscriptionData.data.createIM;
return update(previousResult, {
instant_message: {
$push: [newMsg],
},
});
}
});
}
};
},
})
;
'pubsub'サービスのインスタンスを初期化しましたか? サーバーサブスクリプション機能内でconsole.logを試しましたか? –
この入力をありがとう。確かに、それは変更する必要があったサーバー設定になっていました。それを修正したサーバーサイドのコードを投稿します。 – VikR